C++ 继承与多态

1、继承的本质:代码的复用

2、继承方式:public、protected、private

        默认为private

3、类与类的关系

(1)组合:a part of/has a

(2)继承:a kind of/is a

(3)代理:容器适配器

4、派生类继承了基类的什么?

答:派生类继承了除基类的构造函数、析构函数之外的所有成员和成员函数,还继承了基类的作用域。

5、派生类对象的构造方式

答:先构造从基类继承来的成员(在派生类的初始化列表中)

扫描二维码关注公众号,回复: 1500109 查看本文章

       再构造派生类自己的成员

6、继承方式的比较


7、基类与派生类同名的成员方法的关系

(1)重载:同一个作用域、同一类中、同名、形参列表相同

(2)隐藏:不同作用域、有继承关系、同名

                    隐藏了基类中所有同名的方法

(3)覆盖:不同作用域、继承关系、有虚函数(在基类中)、同名

                    覆盖了基类中同名参数列表相同的虚函数

8、基类对象和派生类对象

基类对象不能赋值给派生类对象  但是派生类对象可以赋值给基类对象

编译器支持从下到上转换

9、基类指针/引用和派生类对象

基类指针/引用可以指向派生类对象 但是派生类指针/引用不能指向基类对象

指针、引用支持从上到下

10、虚函数

   对象的前四个字节是一个虚函数指针,虚函数指针指向一个虚函数表(RTTI信息、虚函数指针相对于整个作用于的偏移量、虚函数的地址)。

虚函数表编译时产生、运行时加载到只读数据段

11、虚函数存在的前提

(1)可以取地址

(2)有对象(依赖于对象调用)

12、哪些函数可以作为虚函数?

(1)构造函数   不可以

答:因为构造函数是用来产生对象的

(2)析构函数   可以

(3)inline内联函数  不可以

答:内联函数是在调用点直接展开的 不能取地址

(4)static修饰的函数  不可以

答:因为静态的成员函数不依赖于对象

13、静多态和动多态

静多态:编译时绑定  (模板、函数重载)

动多态:运行时绑定  (虚函数)

14、纯虚函数和抽象类

纯虚函数的定义:

virtual void bark() = 0;

有纯虚函数的类就是抽象类

抽象类不能定义对象 但是可以定义指针或引用

15、基类指针指向堆上的派生类对象时,需要将基类的析构函数写成虚析构函数,否则派生类对象不分得不到析构

16、类中成员能不能访问、访问权限是否正确、函数默认值用哪个都是在编译阶段就确定的

       最终调用哪个派生类对象的方法是在运行时(虚函数表中)




猜你喜欢

转载自blog.csdn.net/moon5555/article/details/79745376