C++ 类与对象part2(const成员 初始化列表 explicit关键字)

目录

const成员

运算符重载实现数组

初始化列表

 关键字:explicit(不允许隐式类型转换)(针对的是单参数的构造函数)


const成员

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第1张图片


运算符重载实现数组

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第2张图片

 C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第3张图片


初始化列表

初始化:

1.赋值初始化

2.初始化列表初始化

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第4张图片

下面这段代码会报错,因为const变量必须在定义的时候初始化,所以const变量必须处理

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第5张图片

 那怎么办呢?

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第6张图片

C++11支持上面的写法,即给-x缺省值(默认构造函数)(但这并不是初始化)

 问题又来了,C++11之前是怎么处理的捏?

——初始化列表

 看一道程序阅读题体会一下吧!

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第7张图片

 (-a1没有初始化,采用缺省值1,++后变成2)

(-a2已经有初始化,就不采用缺省值了,--后变成了0)

有三类必须在初始化列表初始化: 

1.const作成员变量时

2.引用作成员变量时(引用也必须在定义的时候初始化)

3.自定义类型作成员变量时

(默认生成的构造函数,对于内置类型不做处理,对于自定义类型会去调用他的默认构造)

(什么事默认构造,就是不传参数就可以构造的那一个,是全缺省的)

 C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第8张图片

 

来一道例题看看吧:

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第9张图片

答案为D(注意初始化次序是按声明顺序来的) 


区分两个

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第10张图片

 关键字:explicit(不允许隐式类型转换)(针对的是单参数的构造函数)

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第11张图片

那如果是多参数的构造函数呢?

答:C++98不支持,C++11进行了拓展,多参数的构造函数也可以支持隐式类型转换。

例:

C++ 类与对象part2(const成员 初始化列表 explicit关键字)_第12张图片

你可能感兴趣的:(C++,c++,开发语言)