当一个类中包含其他类的对象时构造函数的调用顺序
来源:互联网 发布:网络直播的产生与发展 编辑:程序博客网 时间:2024/05/14 10:50
1.按在组合类的定义中出现的顺序调用内嵌对象的构造函数(与初始化列表中出现的顺序无关)
2.调用本类构造函数的函数体
组合类构造函数定义的一般形式一般为:
类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),……
{类的初始化}
#include <iostream>#include <cmath>using namespace std;class point {public: point(int xx=0,int yy=0) { x=xx; y=yy; cout<<"create point"<<endl; } point(point &p); int getx(){return x;} int gety(){return y;}private: int x,y;};point::point(point &p){ x=p.x; y=p.y; cout<<"copy point "<<endl;}class line{public: line(point xp1,point xp2); line(line &l); double getlen(){return len;}private: point p1,p2; double len;};line::line(point xp1,point xp2):p1(xp1),p2(xp2){ cout<<"create line"<<endl; double x=double(p1.getx()-p2.getx()); double y=double(p1.gety()-p2.gety()); len=sqrt(x*x+y*y);}line::line(line &l):p1(l.p1),p2(l.p2){ cout<<"copy line"<<endl; len=l.len;}int main(int argc, char *argv[]){ point myp1(1,1),myp2(4,5); line lin(myp1,myp2); line lin2(lin); cout<<"length of lin:"<<lin.getlen()<<endl; cout<<"length of lin2:"<<lin2.getlen()<<endl; return 0;}
结果如下:
create point
create point
copy point
copy point
copy point
copy point
create line
copy point
copy point
copy line
length of lin:5
length of lin2:5
可以看到在创造line的对象前,先调用了point类的复制构造函数创建了两个point类的对象.之后才开始调用自己的构造函数.
0 0
- 当一个类中包含其他类的对象时构造函数的调用顺序
- C++构造函数执行顺序测试(成员包含其他类对象的时候)
- C++中建立派生类对象时构造函数的调用顺序
- 一个类在调用构造函数时,各个数据成员的构造顺序。
- 类的构造函数调用其他构造函数
- 内嵌子对象时派生类构造函数与析构函数的调用顺序
- c++中 子类父类的构造函数调用顺序
- C++中类的构造函数调用顺序
- C++中类的构造函数调用顺序
- C++中类的构造函数调用顺序
- java 类中 构造函数的相互调用 顺序
- c++结构体中包含类对象成员的问题 malloc函数不能调用构造函数 new可以
- 【Java】中类的构造方法与类中创建其他类对象的先后顺序
- 类的构造函数调用顺序是什么?
- 派生类构造函数的调用顺序
- 派生类构造函数的调用顺序
- C++ 类构造函数的调用顺序
- JAVA一个类有两个构造函数,当在一个构造函数中调用另外一个构造函数时为什么要用this.()而不能用类名.()
- win10录屏操作
- OpenCV设置多边形二值化掩码
- vs2013+win7无GPU+python+微软caffe
- 组件的生命周期路线
- OpenCV简介
- 当一个类中包含其他类的对象时构造函数的调用顺序
- 1分钟彻底理解C语言指针的概念
- Realm及相关对象
- 【MyBatis学习11】关联关系collection:1对多关联的两种方法
- Windows Python 开发环境
- Linux--网络编程(三)TCP编程
- bzoj 3309: DZY Loves Math (反演)
- [BZOJ2693]jzptab(莫比乌斯反演)
- 分布式开发简介