从零单排c++ primer(15)

(1)面向对象程序设计(OOP)的核心思想是数据抽象、继承和动态绑定。
(2)通过继承联系在一起的类构成一种层次关系。通常在层次关系的根部有一个基类。其他类则直接或间接地从基类继承而来,这些继承得到的类称为派生类。
(3)基类负责定义在层次关系中所有类的共同拥有的成员,而每个派生类定义各自特有的成员。
(4)在c++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区分对待。
(5)派生类必须通过使用类派生列表明确指出它是从哪个基类继承而来的。
(6)派生类必须在其内部对所有重新定义的虚函数进行声明。
(7)函数的运行版本由实参决定,即在运行时选择函数的版本,所以动态绑定有时又被称为运行时绑定(也就是java中的多态奥!)
(8)在c++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定。
(9)基类通常都应定义一个虚析构函数,即使该函数不执行任何实际操作也是如此。
(10)基函数通过在其成员函数的声明语句之前加上关键字virtual使得该函数执行动态绑定。
(11)任何构造函数之外的非静态函数都可以是虚函数。
(12)关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义。
(13)如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数。
(14)成员函数如果没被声明为虚函数,则其解析过程发生在编译时而非运行时。
(15)派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定是有权访问从基类继承而来的成员。
(16)在派生类对象中含有与其基类对应的组成部分,这一事实是继承的关键所在。
(17)尽管派生类对象中含有从基类继承而来的成员,但是派生类并不能直接初始化这些成员。每个类控制它自己的成员初始化过程。
(18)首先初始化基类的部分,然后按照声明的顺序依次初始化派生类的成员。
(19)派生类可以访问基类的公有成员和受保护成员。
(20)每个类负责定义各自的接口。要想与类的对象交互必须使用该类的接口,即使这个对象是派生类的基类部分也是如此。
(21)如果定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义,无论从基类中派生出来多少个派生类,对于每个静态成员来说都只能存在唯一的实例。
(22)如果想将某个类用作基类,则该类必须已经定义而非仅仅声明,而且一个类不能派生它本身。
(23)使用关键字final可以防止继承的发生。
(24)理解基类和派生类之间的类型转换是理解c++语言面向对象编程的关键所在。
(25)当使用基类的指针或引用时,实际上我们并不清楚该指针或引用所绑定的对象的真实类型。该对象可能是基类的对象,也可能是派生类的对象。
(26)和内置指针一样,智能指针类也支持派生类向基类的类型转换,这意味着我们可以将一个派生类对象的指针存储在一个基类的智能指针中。

你可能感兴趣的:(C++,学习,语言,VC,C++Primer)