分类: C/C++
2013-02-06 19:02:02
Chapter 15. Object-Oriented Programming
1. 增加override关键字,派生类用此可显式表明重写了挂有此关键字基类的虚函数。好像c# java早就有了,阅读性增加了不少。
2. 增加final关键字,在类名后面时表明一个类不能被用作基类,在一个虚函数后面时表示派生类不可重写此虚函数。
//class base final class base { public: virtual void p(){//...} //virtual void p(){//...} final }; class derived: public base{ public: void p(){//..} override };第一行注释如果打开,去掉第二行,那么base就不能用作derived的基类,4.6这俩都不支持,只能看看。
3. copy-control基类与派生类之间的关系
基类的默认的构造、考构及运算符、析构是私有或delete,那么在派生类中对应就是delete;
基类的构造是私有或delete,派生类的默认合成的构造和考构都是delete;
如果基类的版本是私有或delete,派生类对mv构造声明default时,会被编译器认为是delete的。
SBL的意思好像是这些在基类最好都有自己定义的版本,哪怕是default的。
4. 可继承的构造函数
class derived: public base{ public: using base::base; };using语句在派生类中声明基类的构造函数,这样在派生类中直接使用基类的构造函数,传入的参数会传入到基类版本中去。
4.6还不支持:error: 'base::base' names constructor
由于using语句无法加explicit或constexpr,所以基类构造函数有什么特性,using完了派生类的也具有同样特性。