《C++Primer》第 5 版第 7 章笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CV2017/article/details/82745134

1. 成员函数的声明必须在类的内部,它的定义可以在类的内部也可以在类的外部,作为接口组成部分的非成员函数,它们的定义和声明都在类的外部

2. 用请求该函数的对象地址初始化 this,this 的目的是指向对象,this 是一个常量指针,不允许改变 this 中保存的地址

3. 常量对象,常量对象的引用或指针都只能调用常量成员函数

4. 编译器分两步处理类:首先编译成员的声明,然后才轮到成员函数体(如果有的话),因此,成员函数体可以随意使用类中的其他成员而无须在意这些成员出现的次序

5. 紧跟在参数列表后面的 const 表示 this 是一个指向常量的指针,像这样使用 const 的成员函数被称作常量成员函数,类外部定义的成员的名字必须包含它所属的类名:

double sales_data::avg_price() const 
{
	if (units_sold)
	{
		return revenue/units_sold;
	} 
	else
	{
		return 0;
	}
}

6. return *this 返回调用该函数的对象

7. 因为左侧运算对象是一个 Sales_data 的对象,所以返回类型应该是 Sales_data&

8. IO 类属于不能被拷贝的类型,因此我们只能通过引用来传递它们

9. 默认情况下,拷贝类的对象其实拷贝的是对象的数据成员

10. 构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数

11. 构造函数的名字和类名相同,构造函数没有返回类型,构造函数不能被声明成 const ,构造函数在 const 对象的构造过程中可以向其写值,类可以包括多个构造函数,默认构造函数无须任何实参

12. 只有当类没有声明任何构造函数时,编译器才会自动生成默认构造函数,如果类包含内置类型或者复合类型的成员,则只有当这些成员全都被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数

13. 一旦我们定义了其他的构造函数,那么也必须定义一个默认构造函数

14. Sales_data() = default; 默认构造函数

15. 构造函数初始值列表,当某个数据成员被构造函数初始值列表忽略时,它将以与合成默认构造函数相同的方式隐式初始化

16. 使用访问说明符加强类的封装性,定义在 public 说明符之后的成员在整个程序内可被访问,public 成员定义类的接口,定义在 private 说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private 部分封装了(即隐藏了)类的实现细节

17. 定义类的 struct 和 class 在默认访问权限上有区别

18. 最好在类的开始声明友元,友元允许其他类或者函数访问它的非公有成员

19.  类中可以自定义某种类型在类中的别名,用来定义类型的成员必须先定义后使用

20.  因为我们已经提供了一个构造函数,所以编译器不会自动生成默认构造函数,如果我们的类需要默认构造函数,必须显式地把它声明出来,我们使用 = default 告诉编译器为我们合成默认的构造函数

21. 定义在类内部的成员函数是自动 inline 的

22. 成员函数与非成员函数都可被重载

23. 在变量的声明中加入 mutable 关键字可以改变一个成员变量的值,即使是在 const 成员函数中

24. 类内初始值必须使用 = 的初始化形式或者花括号括起来的直接初始化形式

25. 返回引用的函数是左值的,意味着这些函数返回的是对象本身而非对象的副本

26. 一个 const 成员函数如果以引用的形式返回 *this,那么它的返回类型将是常量引用

27. 非常量版本的函数对于常量对象是不可用的,所以我们只能在一个常量对象上调用 const 成员函数

28. 即使两个类的成员列表完全一致,它们也是不同的类型

29. 编译器处理完类中的全部声明后才会处理成员函数的定义

30.  

猜你喜欢

转载自blog.csdn.net/CV2017/article/details/82745134
今日推荐