C++(构造函数与析构函数)
1. 构造函数
用于对类的对象的初始化,构造函数名与类名相同。
可在类内直接定义,也可在类内声明类外定义(定义时在函数名前加类名::)。
构造函数无返回值类型。
class C
{
public:
C(int a,int b);//类内声明
private:
int m_num1;
int m_num2;
};
//类外定义
C::C(int a,int b)
{
m_num1=a;
m_num2=b;
}
带参数的构造函数
初始化可以在函数体内,也可在函数体外。可以重载。
上例为函数体内进行初始化
函数体外初始化:C::C(int a,int b):m_num1(a),m_num2(2){}; //只能用()进行初始化,不能用“=”,多个参数之间用逗号隔开 //“:”到“{”的部分为初始化列表
只能在初始化列表里进行初始化的情况:
1、const成员和引用成员的初始化
2、类A的构造函数有参,其成员是类B的对象,但是类B的构造函数无参。缺省构造函数
若未定义一个类的构造函数,则C++提供一个缺省的构造函数。缺省构造函数仅仅负责创建对象,而不做任何初始化工作。拷贝构造函数
用一个对象的值创建并初始化另一个对象拷贝构造函数名与类名相同,没有返回值类型,只有一个参数(为该类对象的引用)。
格式为
类名::拷贝构造函数名::(类名&引用名)
{函数体}
eg:
class C
{
public:
C(int a,int b)//带参构造函数
{
m_num1=a;
m_num2=b;
}
C(C&obj)//拷贝构造函数的定义
{
m_num1=obj.m_num1;
m_num2=obj.m_num2;
}
private:
int m_num1;
int m_num2;
int main()
{
C objA(1,2);//objA的m_num1的值为1,m_num2的值为2
C objB(objA);//此时objB的成员被objB赋值
return 0;
}
2. 析构函数
结束对象的生命期,打开一个文件使用完后关闭文件
无参数和返回值类型,不能随意调用,不能重载。析构函数名为~类名。