C++中类的构造函数调用顺序
2014-03-27 10:33
190 查看
C++子类和父类的构造函数调用顺序
由输出结果我们可以看到,先调用的是base类的构造函数,再调用了drived类的构造函数,也就是说,在声明子类实例的时候,是会先调用父类的构造函数的。这个很好理解,子类是包含了父类的信息的,所以要构造子类,必须先构造父类的信息,然后加入一些子类的新信息。
成员类的构造函数调用顺序
从上面的结果我们科看到,先调用的是构造函数。这是为什么?因为类中含有成员类时,先要给成员类申请空间,先调用成员类的构造函数,然后再调用自身的构造函数。
上面的例子是声明了一个name类,一个base类,一个drived类,其中drived类是从base类派生,且drived类中声明了name类的一个实例。
那么根据我们上面的分析,我们声明了drived类之后,先会调用父类构造函数,也就是输出i am base construction,然后调用自身的成员类构造函数,也就是i am name construction,最后调用自身的构造函数,也就是i am drived construction。
同理,如果我们在父类base类中声明了name成员类的话,顺序会是name->base->drived。我下面给出测试例子:
本文来自IT部落格,转载请注明,http://www.itbuluoge.com,~致力于编程、算法、数据库技术的分享
#include <iostream> using namespace std; //子类 class base { public: base() { cout<<"i am base constuction!"<<endl; } }; //父类 class drived : public base { public: drived() { cout<<"i am drived constuction!"<<endl; } }; int main() { drived d; //输出结果 /* i am base constuction! i am drived constuction! Press any key to continue */ return 0; }
由输出结果我们可以看到,先调用的是base类的构造函数,再调用了drived类的构造函数,也就是说,在声明子类实例的时候,是会先调用父类的构造函数的。这个很好理解,子类是包含了父类的信息的,所以要构造子类,必须先构造父类的信息,然后加入一些子类的新信息。
成员类的构造函数调用顺序
#include <iostream> using namespace std; class son { public: son() { cout<<"i am son constuction!"<<endl; } }; class family { public: family() { cout<<"i am family constuction!"<<endl; } son jack; }; int main() { family happyfamily; //输出结果 /* i am son constuction! i am family constuction! Press any key to continue */ return 0; }
从上面的结果我们科看到,先调用的是构造函数。这是为什么?因为类中含有成员类时,先要给成员类申请空间,先调用成员类的构造函数,然后再调用自身的构造函数。
#include <iostream> using namespace std; //父亲姓名 class name { public: name() { cout<<"i am name constuction!"<<endl; } }; //子类 class base { public: base() { cout<<"i am base constuction!"<<endl; } }; //父类 class drived : public base { public: drived() { cout<<"i am drived constuction!"<<endl; } name drivedname; }; int main() { drived d; //输出结果 /* i am base constuction! i am name constuction! i am drived constuction! Press any key to continue */ return 0; }
上面的例子是声明了一个name类,一个base类,一个drived类,其中drived类是从base类派生,且drived类中声明了name类的一个实例。
那么根据我们上面的分析,我们声明了drived类之后,先会调用父类构造函数,也就是输出i am base construction,然后调用自身的成员类构造函数,也就是i am name construction,最后调用自身的构造函数,也就是i am drived construction。
同理,如果我们在父类base类中声明了name成员类的话,顺序会是name->base->drived。我下面给出测试例子:
#include <iostream> using namespace std; //父亲姓名 class name { public: name() { cout<<"i am name constuction!"<<endl; } }; //子类 class base { public: base() { cout<<"i am base constuction!"<<endl; } name drivedname; }; //父类 class drived : public base { public: drived() { cout<<"i am drived constuction!"<<endl; } }; int main() { drived d; //输出结果 /* i am name constuction! i am base constuction! i am drived constuction! Press any key to continue */ return 0; }
本文来自IT部落格,转载请注明,http://www.itbuluoge.com,~致力于编程、算法、数据库技术的分享
相关文章推荐
- C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定
- c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)
- C++ 虚继承对基类构造函数调用顺序的影响
- C++派生类构造函数调用顺序
- C++继承中构造函数、析构函数调用顺序及虚析构函数
- 关于C++中构造函数的调用顺序
- C++ 构造函数调用顺序(转载)
- C++继承中构造函数调用顺序
- c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)
- C++中构造函数与析构函数的调用顺序
- C++ 虚继承对基类构造函数调用顺序的影响
- 【C++】基类和派生类构造函数的调用顺序
- c++ 子类父类 的构造函数调用顺序
- <C++>13.构造函数和析构函数的调用顺序
- C++ 全局构造函数调用的顺序
- C++中构造函数与析构函数的调用顺序
- C++:派生类的构造函数和析构函数的调用顺序
- C++ 全局构造函数调用的顺序
- 【c++】构造函数调用顺序的研究
- C++继承中构造函数、析构函数调用顺序及虚析构函数