Chinaunix首页 | 论坛 | 博客
  • 博客访问: 299971
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: 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完了派生类的也具有同样特性。

阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~