博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++初始化列表
阅读量:2430 次
发布时间:2019-05-10

本文共 1417 字,大约阅读时间需要 4 分钟。

c++类对象的构造顺序:

  1. 分配内存,调用构造函数时,隐式/显示的初始化各数据成员。
  2. 进入构造函数后在构造函数中执行一般计算。
class Person{private:    int age;public:    Person(int age)    {        this->age = age;    }    int getAge()     {        return age;    }};int main(){   Person* p = new Person(10);   std::cout << p->getAge() << std::endl;   return 0;}

以上代码中 this->age = age; 执行前age已经被默认初始化。

初始化列表的优势

提高效率,省掉构造函数中的开销。

初始化顺序:

它是关于C++初始化类成员的,它们是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。

#include 
class Test{private: int x; int y;public: Test(int a, int b): y(b), x(y) { } int getX() { return x; } int getY() { return y; }};int main(){ Test* test = new Test(1,2); std::cout << test->getX() << std::endl; std::cout << test->getY() << std::endl; return 0;}

运行结果:

02

可能以为上面的代码将会首先初始化 y = 2,然后再初始化 x = y = 2,然而x = 0,因为按照声明的顺序是要先初始化x, 然后再初始化y,所以x = 0。

使用场景:

  • 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面。
  • 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面。
  • 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
class ABC{public:         ABC(int x,int y,int z);private:         int a;         int b;         int c;};class MyClass{public:        MyClass():abc(1,2,3)        {        }private:        ABC abc;};
  • C++在继承里面,当父类构造函数为有参构造时,需要使用初始化列表。
class Base{private:    int i;public:    Base(int i){        this->i = i;    }};class Inheritance: public Base{private:    int j;public:    Inheritance(int j): Base(10)    {        this->j = j;    }};

转载地址:http://ywjmb.baihongyu.com/

你可能感兴趣的文章
这届AI程序员厉害了,还没出校门就被预定?
查看>>
良心帖!看完这篇,你的Python入门基础就差不多了!
查看>>
人工智能还会火多久?
查看>>
安装pygame和pip的问题以及过程
查看>>
想做高薪AI工程师!有这么难吗?
查看>>
天呀!人工智能会像Android和iOS一样,归于平淡吗?
查看>>
小程序后台开发的那些事-CSDN公开课-专题视频课程
查看>>
使用AWS轻松构建PB级企业BI解决方案-CSDN公开课-专题视频课程
查看>>
从0到1 区块链的概念到实践-CSDN公开课-专题视频课程
查看>>
基于深度学习实现语义识别和问答判断模型及算法优化-制造业-CSDN公开课-专题视频课程...
查看>>
AWS 在线公开课(大数据及分析):Amazon Kinesis和Spark流式处理-CSDN公开课-专题视频课程...
查看>>
引领微服务创新-IBM Microservice Builder 新技术首播!-CSDN公开课-专题视频课程
查看>>
移动平台增强现实体验编辑器 PTC ThingWorx Studio入门-CSDN公开课-专题视频课程
查看>>
深度学习入门及如何转型AI领域-CSDN公开课-专题视频课程
查看>>
基于骁龙 VR SDK的VR图形优化-CSDN公开课-专题视频课程
查看>>
让机器读懂你的意图——人体行为预测入门-CSDN公开课-专题视频课程
查看>>
应用Bluemix实现商业价值-CSDN公开课-专题视频课程
查看>>
传统IT环境与PaaS环境下的应用开发模式-CSDN公开课-专题视频课程
查看>>
SDCC 2017之大数据技术实战线上峰会-CSDN公开课-专题视频课程
查看>>
一个CloudCC生态软件包的诞生:带你体验CloudCC生态-CSDN公开课-专题视频课程
查看>>