首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手学习C++请问个构造和析构顺序的有关问题

2012-06-11 
新手学习C++请教个构造和析构顺序的问题#include iostreamusing namespace stdclass Date{int y,m,dpu

新手学习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.析构函数的析构顺序刚好与构造顺序相反!!

热点排行