C++ Primer Chapter 15-5

来源:互联网 发布:知字的意思是什么 编辑:程序博客网 时间:2024/06/05 22:01
1:调用非虚函数时,不会发生动态绑定,只有调用虚函数时才会动态绑定。

2:派生类可以覆盖重载的函数,如果一个基类虚函数或者成员函数有好多个重载版本,那么在派生类想要重新定义某一个版本,就必须重新定义所有版本函数(否则根据按名字查找的特性,其他版本将会不可见),其他的重载版本在该派生类作用域中被隐藏,但是又不想把所有的版本都重载,可以用 using 声明一下,这样就可以只覆盖想重新定义的版本了。因为派生类作用域是嵌套基类中的。

3:为了保证 delete 基类指针时,由于基类的指针静态类型和动态类型有可能不符,为了保证执行正确的析构函数,要把基类析构函数定义成虚函数

4:派生类的基类部分由基类自己的构造函数初始化,由基类的析构函数负责销毁。这一点关乎到一个派生类初始化操作和析构操作的很多细节问题。所有关于基类部分的成员的操作都要基类自己完成,不可以由基类负责完成。同时赋值也是一样的。

5:一般基类没有默认、拷贝或移动构造函数,那么派生类一般也没有。

6:如果派生类的构造函不显示初始化基类部分,那么就会调用默认的基类构造函数

7:与构造函数不一样派生类赋值运算符必须显示的为基类部分执行赋值运算符,不会隐式的执行。

8:而析构函数,派生类调用自己的析构函数,派生类的基类部分会自动的(隐式)调用基类析构函数,执行销毁操作。销毁顺序与创建顺序相反

9:在构造函数析构函数调用虚函数知会调用自己的版本。

10:可以用 using 来声明继承直接基类构造函数。using  baseclass_name::baseclass_name 。可以令编译器直接生成派生类构造函数,这些派生类的构造函数参列表基类完全一样,只不过名字换成了派生类的。并且不会改变构造函数访问属性。但是该继承不能继承默认拷贝构造移动构造函数。类似与生成下面这个构造函数,prams 形参列表与基类完全一样
  1. derivedprams):base(arg){}

11:在容器中存放一些继承关系系列对象时,我们可以用基类指针管理对象,而达到这一目的。这些对象都是动态的类型。

12:如果我们在基类对象的容器中存放派生类对象,那么派生类的对象的基类部分被保留,而非基类部分将会被忽略