C++:四种必须使用初始化列表情况-阿里云开发者社区

开发者社区> 吞吞吐吐的> 正文

C++:四种必须使用初始化列表情况

简介:
+关注继续查看
【c++】必须在类初始化列表中初始化的几种情况
 
1. 类成员为const类型
 
2. 类成员为引用类型
 
复制代码
#include <iostream>
using namespace std;
 
class A
{
    public:
        A(int &v) : i(v), p(v), j(v) {}
        void print_val() { cout << "hello:" << i << "  " << j << endl;}
    private:
        const int i;
        int p;
        int &j;
};
 
int main(int argc ,char **argv)
{
    int pp = 45;
    A b(pp);
    b.print_val();
}
复制代码
究其因
 
const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。
 
从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。
 
 
 
3. 类成员为没有默认构造函数的类类型
 
复制代码
#include <iostream>
using namespace std;
 
class Base
{
    public:
        Base(int a) : val(a) {}
    private:
        int val;
};
 
class A
{
    public:
        A(int v) : p(v), b(v) {}
        void print_val() { cout << "hello:" << p << endl;}
    private:
        int p;
        Base b;
};
 
int main(int argc ,char **argv)
{
    int pp = 45;
    A b(pp);
    b.print_val();
}
复制代码
原因同样是创建对象时,要初始类成员的每一个成员
 
 
 
4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
 
复制代码
#include <iostream>
using namespace std;
 
class Base
{
    public:
        Base(int a) : val(a) {}
    private:
        int val;
};
 
class A : public Base
{
    public:
        A(int v) : p(v), Base(v) {}
        void print_val() { cout << "hello:" << p << endl;}
    private:
        int p;
};
 
int main(int argc ,char **argv)
{
    int pp = 45;
    A b(pp);
    b.print_val();
}
复制代码
 
程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4912872.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
程序员知识体系探索:点、线、面、体(下)
程序员知识体系探索:点、线、面、体(下)
1 0
小记基于xstate实现携程金服业务流程动态化
小记基于xstate实现携程金服业务流程动态化
7 0
flutter 版本控制fvm
1先安装 choco powershell 管理员身份运行 不会的话,先打开一个powershell 窗口 ,然后右击任务栏,选择第一个,即可进入
1 0
程序员知识体系探索:点、线、面、体(上)
程序员知识体系探索:点、线、面、体(上)
1 0
Spring Boot 基础教程:集成 Swagger2,构建强大的 API 文档
主要对 Swagger 进行了简单介绍,并用 Spring Boot 集成 Swagger,同时还进行简单的测试,构建我们自己的 API 接口文档。
2 0
漫谈“架构团队”之组织架构(上)
漫谈“架构团队”之组织架构(上)
1 0
飞天加速计划初体验
最近因需要使用云服务器来学习,老师让我们用这个阿里云类进行相关的学习,让我们先进行免费的使用进行学习,慢慢了解,毕竟对于首次接触的事物都是了解为主不会投入大量资金。阿里云平台有详细的教程,让初学者能十分轻松的进行学习。飞天加速计划是个好想法,可以让我们这些学生进行学习,制作出自己的网站。让我在暑假对计算机有了浓厚的兴趣,于是在阿里云我选择了飞天加速计划,学习大数据和服务器啥的,让自己get到更多的知识~
9 0
Spring Boot 基础教程:使用 Swagger3 生成 API 接口文档
主要介绍如何使用 Spring Boot 集成 Swagger3,构建我们自己的 API 接口文档,并对比了 Swagger2 和 Swagger3 的区别,让我们从 Swagger2 向 Swagger3 过渡更加顺滑。
1 0
漫谈“架构团队”之组织架构(下)
漫谈“架构团队”之组织架构(下)
1 0
4852
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载