C++中的面向对象 02.深入探究类的初始化顺序
来源:互联网 发布:北外网络教育作业答案 编辑:程序博客网 时间:2024/06/12 00:43
#include <iostream>#include <stdio.h>using namespace std;class ABCD{public: ABCD(int a, int b, int c) { this->a = a; this->b = b; this->c = c; //调用顺序1.1 //调用顺序2.1 printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c); } ~ABCD() { printf("~ABCD() destructor,a:%d,b:%d,c:%d \n", this->a, this->b, this->c); } int getA() { return this->a; }protected:private: int a; int b; int c;};class MyE{public: //调用顺序1.0 1,1在上面 MyE():abcd1(1,2,3),abcd2(4,5,6),m(100) //构造函数1,列表初始化 { cout<<"MyD()"<<endl;//调用顺序1.2 } ~MyE() { cout<<"~MyD()"<<endl; } //调用顺序2.0 MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(101) //拷贝构造函数2,也要加初始化列表 { printf("MyD(const MyD & obj)\n");//调用顺序2.2 }protected: //private: public: ABCD abcd1; //c++编译器不知道如何构造abc1 ABCD abcd2; const int m; //类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值。 static int count;//static修饰的变量或者函数,属于这个类,不属于具体的对象};int MyE::count = 0; //类中修饰的static修饰的变量或者函数,一定要在class的外面这样初始化//等于告诉编译器给我开辟内存。//调用顺序2.0int doThing( MyE mye1) //实参调用形参。调用拷贝构造函数{ //调用顺序3 printf("doThing() mye1.abc1.a:%d,m:%d\n", mye1.abcd1.getA(),mye1.m); //此时a = 7; m = 101; //实参传给形参的值是abcd1(1,2,3),abcd2(4,5,6),但它会执行abcd1(7,8,9),abcd2(10,11,12),m(100) , return 0;}int main(){ MyE myE; //调用构造函数1 doThing(myE); return 0;}
总结下:
- 先部分后总体。也就是先将所有的零件初始化完了再初始化整体。
- 类中包含其他类的成员函数时,可以使用初始化列表来分别初始化这些成员函数。先初始化别人再初始化自己;先析构自己再析构别人。
- 如果类成员中有const成员,必须要在构造的时候初始化。
- 如果类中有static成员,其实不属于这个类,属于全局,需要在外部初始化。
0 0
- C++中的面向对象 02.深入探究类的初始化顺序
- Java类的初始化顺序探究
- C++中的面向对象 01.类的初始化和释放
- Java 深入解析类的初始化顺序
- 面向对象的派生类对象初始化
- 对象的初始化顺序
- 对象的初始化顺序
- 深入Java变量的初始化问题探究
- [疯狂Java]面向对象:初始化块、初始化代码、初始化顺序
- 【深入理解JVM】:Java类继承关系中的初始化顺序
- 【深入理解JVM】:Java类继承关系中的初始化顺序
- java类与对象的初始化顺序
- Java类及对象初始化的顺序
- Java类和对象的初始化顺序
- Java类与对象的初始化顺序
- Java类和对象的初始化顺序
- java类对象的初始化顺序
- Java 类和对象的初始化过程及初始化顺序
- poll函数详解及原理
- tfs自动编译msbuild参数
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- redis 安装错误 jemalloc.h: No such file or directory
- C++中的面向对象 02.深入探究类的初始化顺序
- C++第三次实验:个人所得税计算器
- C++作业3
- ffmpeg 如何编译出单一的so文件
- C++实验3-多分数段函数求值
- nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping
- C++实验3——本月多少天?
- Android中banner的使用步骤
- ACM递归地推练习 Problem B