新手学习C++请教个构造和析构顺序的问题
#include <iostream>
using namespace std;
class Date{
int y,m,d;
public:
Date(int y=0,int m=0,int d=0):y(y),m(m),d(d)
{
cout<<this<<",Date(int,int,int)"<<endl;
}
~Date(){cout<<this<<",~Date()"<<endl;}
};
class Person{
string name;
Date* birth;
public:
Person(string name,int y,int m,int d)
:name(name)
{
birth = new Date(y,m,d);
cout<<"Person(string,int,int,int)"<<endl;
}
~Person()
{
delete birth;
cout<<"~Person()"<<endl;
}
};
int main()
{
Person p("Daniel", 1980,2,25);
}
请问创建p对象时的调用顺序是怎样的?多谢指教!!!
[解决办法]
类里面的数据成员按定义的顺序进行初始化。那么p对象的顺序是:先name后birth,birth按规则对其内部的数据进行初始化咯。析构函数顺序相反。
[解决办法]
cout<<this<<",Date(int,int,int)"<<endl;
cout<<"Person(string,int,int,int)"<<endl;
cout<<this<<",~Date()"<<endl;
cout<<"~Person()"<<endl;
[解决办法]
http://topic.csdn.net/u/20091128/21/8E3CD12C-62B1-4E60-836E-D8D9125D5682.html
楼主看下这个贴
[解决办法]
先基类后派生类..
[解决办法]
class class_name:派生列表
{
内嵌对象列表
class_name():构造函数列表
{
}
};
//创建class_name对象时,构造函数调用顺序为:
1.按照派生列表中基类声明顺序构造基类部分(如果基类中有虚基类,则该虚基类会在最远派生类构造)
2.按照内嵌对象列表申明顺序构造对象(当然基本类型没有构造函数之说,但顺序依然不变),注意这里不会按照初始化列表中声明的内嵌对象构造顺序来构造。当然了如果是类的指针类型(指针类型仍然为内置类型,他的构造顺序遵从2),但是此时指针所指对象的构造肯定是是你手动调用new时才会构造。
3.析构函数的析构顺序刚好与构造顺序相反!!