class A
{
public:
A(string str=NULL)
{
s=str;
cout<<"constructor A "<<s<<endl;
}
~A()
{
cout<<"destructor A "<<s<<endl;
}
A(const A &p)
{
s=p.s;
cout<<"copy constructor A "<<s<<endl;
}
private:
string s;
};
class B:public A
{
public:
B(string str):A(str)
{
s=str;
cout<<"constructor B "<<s<<endl;
}
~B()
{
cout<<"destructor B "<<s<<endl;
}
private:
string s;
};
A* getA(A t)
{
A* tmp=new A("c");
return tmp;
}
int _tmain(int argc, _TCHAR* argv[])
{
//输出constructor A a
A a("a");
//输出copy constructor A a
A b(a);
//输出 copy constructor A a
// constructor A c
// destructor A a
A* c=getA(a);
//输出 constructor A d
// constructor B d
B d("d");
//输出 destructor A c
delete c;
//在函数结束时按照创建顺序调用析构函数
//destructor B d
//destructor A d
//destructor A a
//destructor A a
return 0;
}
派生类的构造函数调用顺序:基类构造函数–派生类构造函数–派生类析构函数–基类析构函数