200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C++ Primer 5th笔记(7)chapter7 类:构造函数 类类型转换 聚合类

C++ Primer 5th笔记(7)chapter7 类:构造函数 类类型转换 聚合类

时间:2019-02-21 01:56:24

相关推荐

C++ Primer 5th笔记(7)chapter7 类:构造函数 类类型转换 聚合类

1. 构造函数

1.1构造函数的初始值有时是必须的(比如引用)

1.2 成员初始化的顺序

初始值列表只说明用于初始化成员的值,而不限定初始化的具体执行顺序, 因此构造函数初始化的值的顺序最好与成员声明一致。

class X{int i;int j;public:X(int val):j(val), i(j) {} //构造函数,由于i在j之前被初始化,所以未定义,试图使用未定义的j初始化iX(int val):i(val), j(val) {} //正确};

1.3默认实参和构造函数

class Sales_data{Sales_data(std::string s = "") //等同于Sales_data() = default; }

1.4 委托构造函数delegating constructor

2. 隐式的类类型转换

bine("9-999-9999-9");//错误:需要用户定义的两种转换:bine(string("9-999-9999-9"));//bine(Sales_data("9-999-9999-9"));//ok:隐式转换成string,显式转换成Sales_data

3、explicit关键字阻止"直接初始化"的隐式转换

只对一个实参的构造函数有效, 需要多个实参的构造函数不能用于执行隐式转换。explicit只能用于类内(头文件),不能在类外的定义里面

Sales_data item1(null_book); // 正确:直接初始化Sales_data item2 = null_book; //错误:不能将explicit的构造函数用于拷贝形式初始化过程

4 聚合类

成员都是public的。·没有定义任何构造函数。·没有类内初始值。·没有基类,也没有virtual函数。特殊的初始化语法形式

例如,下面的类是一个聚合类:

struct Data{int ival;string s;};//val1.ival=0;val1.s=string("Anna")Data val1={0,"Anna"};

5 转换构造函数

当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数。

class Complex{public:Complex(double x){};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。