必须使用初始化列表的情况
- const 数据成员
class test
{
public:
test()
{
cout << "constructor with argument\n";
}
private:
const int i=10;
};
- 只有静态常量成员才可以在类中初始化,如果没有在类内、类外初始化。则其会被初始化为0 或者 “空”(NULL或者string(“”))
- 非静态常量成员必须在初始化列表中完成
- 再需要注意的就是static成员可以在类中声明为任何的格式,但是数据成员定义必须在类的外部定义。与普通的数据成员不同,static成员不通过类构造函数进行初始化,而是应该在定义时进行初始化。
- 引用类型的数据成员
class test
{
public:
test()
{
cout << "constructor with argument\n";
cout << i <<endl;
}
private:
int& i;
//static int j;
class test
{
public:
test()
{
cout << "constructor with argument\n";
cout << i <<endl;
}
private:
static int& i;
static int j;
};
int test::j = 10;
int& test::i = j;
- 如果类没有默认构造函数
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;
};
- 如果存在继承关系,派生类中必须在其初始化列表中调用基类的构造函数
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;
};
class Base
{
public:
Base(int j):i(j)
{
cout << "constructor with argument\n";
int p = 20;
i = p;
cout << i <<endl;
}
private:
int i;
};
class Derive: public Base
{
public:
Derive(int i ):Base(i),_i(i)
{
}
Derive(const Derive &d):Base(d),_i(d._i)
{
}
Derive& operator=(const Derive& d)
{
Base::operator=(d);
_i = d._i;
return *this;
}
private:
int _i;
};
转载于:https://www.cnblogs.com/chengkeke/p/5417352.html
必须使用初始化列表的情况相关推荐
- 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?
初始化列表和构造函数初始化的区别是什么? 初始化和赋值对内置类型的成员没有太大的区别,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的.只有一些需要注意的事项 初始化列表一般情况如下: D ...
- 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况(转载)
1.参考博客 博客链接1 博客链接2 2.实例如下 class A { ... private:int a; }; class B : public A { ... private:A &aa ...
- 必须采用初始化列表一共有三种情况
有一个类B继承自类A,他们数据成员如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class A { - private: int &a; }; class B ...
- C++必须使用【初始化列表】初始化数据成员的三种情况
类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员: 2.进入构造函数后在构造函数中执行一般赋值与计算. 使用初始化列表有两个原因: 原因1.必须这样做: < ...
- C++中必须用初始化列表的四种情况
初始化列表 1. 类成员为const类型 2 . 类成员为引用类型 3.没有默认构造函数的类类型 4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数 1. 类成员为const类型 ...
- 派生类参数初始化列表和基类构造函数顺序
今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...
- C++ 类构造函数初始化列表介绍
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式. 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个 ...
- C++类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public: int a; f ...
- C++ 构造函数初始化列表
<C++ Primer>中提到在以下三种情况下需要使用构造函数初始化列表: 需要初始化的类的成员变量是对象的情况: 需要初始化的类的成员变量由const修饰的或初始化的类的引用成员变量: ...
最新文章
- angularJs的学习笔记-01(创建项目)
- 每张脸值5美元,谷歌花钱买数据强化刷脸,还把隔空操控手机变成现实
- Oracle DBlink相关
- 推荐20个很有帮助的 Web 前端开发教程
- leetcode : 基础技巧
- How does SAP OData framework interpret $expand=Notes
- 初学者指南:如何为Red Hat Process Automation Manager配置电子邮件服务任务
- 合肥特殊教育中专学校计算机,安徽省特殊教育中专学校
- 使用特征_R语言-使用caret包实现特征选择:递归特征消除(RFE)算法
- bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型
- Atitit 微服务之道 attilax著 1. 什么是微服务架构?	1 1.1. 、微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现	2 1.2. 微服务与康威定律	2 1
- 面试:list集合去重
- 实战|朝阳医院药品销售分析案例
- 系统自带测试软件,无需鲁大师检测!Windows自带工具检查系统健康度
- 台式计算机cpu允许温度,台式机cpu温度多少正常 台式电脑工作时温度范围
- 域名含义解释查询_域名含义解释查询
- Cookie、Session 简述
- 简述空串和空格串(或称空格符串)的区别。
- [游戏]求生之路新地图下载安装说明
- 现代密码学-密码学概论与基本知识
热门文章
- python gifmaze_Windows平台python验证码识别
- 计算机网络课程设计之网络嗅探器的设计与实现
- 小爱同学app安卓版_小爱课程表3.0全新升级 课表倒入更简单所有手机能用
- python爱因斯坦的问题_爱因斯坦的思考题.py
- Qt笔记-profile中基本配置(获取环境变量、设置生成路径、包含文件)
- canvas笔记-closePath函数的使用(含例子)
- Java高级语法笔记-文件读写(2)
- C/C++轻松实现文件下载
- c++ mysql 操作_c++操作mysql入门详解
- Python实现HTTP服务器(四)单进程线程非阻塞实现多任务