构造函数和析构函数
构造函数可以重载(overload),析构函数不可以。
构造函数可以重载(overload),析构函数不可以。
构造函数初始化顺序和析构函数析构顺序恰好相反。
构造函数和析构函数是两个非常特殊的函数:它们没有返回值。
构造函数不可以是虚函数,析构函数可以是虚函数。
构造函数和析构函数是两个非常特殊的函数:它们没有返回值。
构造函数不可以是虚函数,析构函数可以是虚函数。
构造函数必须定义,即使什么也不做,也就是说只有声明是错误的。或者使用缺省的构造函数。
如果父类定义了构造函数,且构造函数对变量进行了初始化,但是没有赋值,则子类的构造函数必须对父类进行初始化。
编译器中初始化顺序是先对父类进行初始化,在对子类中变量进行初始化。子类变量初始化顺序是以声明顺序进行初始化。
子类的构造函数可以改变父类私有成员的值,而子类成员函数不可以。
class A
{
public:
int i;
A() {}
A() ; //这个是错的
};
{
public:
int i;
A() {}
A() ; //这个是错的
};
编译器中初始化顺序是先对父类进行初始化,在对子类中变量进行初始化。子类变量初始化顺序是以声明顺序进行初始化。
子类的构造函数可以改变父类私有成员的值,而子类成员函数不可以。
class A
{
public:
int a;
A(int i):a(i) {}//初始化了,但没有赋值
//A(int i = 0):a(i) {} //初始化了,又赋了值
};
class B : public A
{
public:
int b;
int c;
B(int k):c(k), A(k), b(k) {}/ /初始化顺序是A,b,c
};
{
public:
int a;
A(int i):a(i) {}//初始化了,但没有赋值
//A(int i = 0):a(i) {} //初始化了,又赋了值
};
class B : public A
{
public:
int b;
int c;
B(int k):c(k), A(k), b(k) {}/ /初始化顺序是A,b,c
};
转载于:https://blog.51cto.com/cmdblock/117629