C++ primer 第十二章

1. 将const加在形参表之后,就可以将成员函数声明为常量。const成员函数不能改变所操作对象的数据成员。const必须同时出现在声明和定义中,跟static不同。

 

2. 在类内部定义的成员函数,将自动作为inline处理。

 

3. 因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。但是,只要类名出现就可以认为该类已声明,所以可以使用指向自身类型的指针或引用。

 

4. 如果成员函数需要返回对其自身类型对象的引用,可以使用this指针。

return *this;

 

5. 普通的非const成员函数中,this的类型是指向类类型的const指针,可以改变this所指向的值,但不能改变this所指向的地址。在const成员函数中,this的类型是指向const类类型对象的const指针,既不可以改变this所指向的值,也不可以改变this所指向的地址。

 

6. 可变数据成员mutable永远都不能为const,甚至当它是const对象的成员时也如此。因此,const成员函数可改变mutable成员。

 

7. 可以初始化const对象、引用类型对象和没有默认构造函数的类类型,而不能进行赋值。所以应该用必须使用【构造函数初始化列表】初始化const对象、引用类型、无默认构造函数的类类型。

 

8. 在构造函数初始化列表中,成员被初始化的顺序是按照它们被定义的顺序。第一个被定义的成员首先初始化。

 

9. 一个类只要定义了一个构造函数,编译器就不会在生成默认构造函数。每个构造函数都应该为每个内置或复合类型的成员提供初始化式。没有初始化内置或复合类型成员的构造函数,将使那些成员处于未定义的状态。

 

10. 类通常应该有一个默认构造函数。如果没有,那么有这些缺点:

<1> 该类不能用作动态分配数组的元素类型

<2> 该类用作静态分配数组的类型时。必须为每个元素提供显式的初始化式

<3> 对象保存该类类型对象的容器,比如vector,不能使用【只接受容器大小而没有同时提供元素初始化式】的构造函数。

 

11. 隐式类类型转换,例:

类Class A有一个【单实参】的构造函数A(string str);而有某个普通函数B(A a),需要传递一个A类型的实参,此时如果传递一个string类型,即B(str)。则会完成一次隐式类型转换,利用该构造函数,将string类型转换成Class A的一个对象。

 

如果想要防止隐式类型转换,可以使用explicit关键字,在本例中是explicit A (string a);

explicit关键字只能用于类内部的构造函数声明上,在类外进行定义时不再重复它。

通常,单形参构造函数应该是explicit,可以避免错误。

 

12. 对于没有构造函数而且全体数据成员均为public的类,可以采用与初始化数组元素相同的方式来初始化其成员。根据数据成员的声明次序来使用初始化式。

 

13. 友元friend机制允许将类的非公有成员的访问权授予指定的函数或者类。友元声明以关键字friend开始,只能出现在类内部。

如果将一个类设为友元,则友元类的所有成员函数都可以访问授予友元关系类的非公有成员。

 

14. 友元函数可以在类的内部定义,该函数的作用域扩展到【包围该类定义的作用域】。

 

15. static数据成员独立于该类的任意对象而存在。static成员函数没有this形参。

当我们在类的外部定义static成员时,无需重复使用static关键字,只需要在类内部声明时使用。

 

16. static成员不是通过类构造函数初始化,而应该在定义时初始化。

如果初始化式是一个【常量表达式】,那么const static数据成员可以在类定义体内部进行初始化。但是即使在类的定义体内部初始化,const static数据成员仍必须在类的定义体之外进行定义。

 

17. static数据成员的类型可以是该成员所属的类类型,与非static成员不同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值