构造函数和析构函数


   构造函数可以重载(overload),析构函数不可以。
   构造函数初始化顺序和析构函数析构顺序恰好相反。
   构造函数和析构函数是两个非常特殊的函数:它们没有返回值。
   构造函数不可以是虚函数,析构函数可以是虚函数。

  
  
   构造函数必须定义,即使什么也不做,也就是说只有声明是错误的。或者使用缺省的构造函数。
class 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
};