您的位置:首页 > 编程语言 > C语言/C++

C++知识总结(18)

2017-08-10 21:51 225 查看

81 什么是虚函数?

虚函数是运行时多态不可少的技术,虚函数的存在主要是允许基类指针调用派生类函数

82 什么函数不能声明为虚函数

普通函数(非成员函数),构造函数,内联函数,静态成员函数,友元函数都不能声明为虚函数。

83 举例谈一谈如何解决多继承中的二义性问题

二义性解决方法: 1:虚基类2: 作用域限定符

虚继承主要解决二义性的问题,并且为最远派生类提供唯一的基类成员,而不产生多次拷贝。

84 怎样消除多重继承中的二义性?  

1.成员限定符  2.虚基类

85 类的大小是如何计算的?

总结:

1,普通单继承,只需将自身成员变量的大小加上父类大小(父类中 有虚函数,子类中不管有没有)若父类没有虚函数,则子类大小需要加上指向虚表的指针大小。

2,普通多继承,若几个父类都有虚表,则子类与第一个父类公用一个虚表指针,其他有几个有虚函数的父类则就有几个虚表指针。

3,虚拟单继承,此时若子类有虚函数则加上一个自身的虚表指针的大小,(若没有则不加)再加上自身的成员变量大小,还要加上一个虚类指针ptr_sonclass_fatherclass,最后加上父类的大小。

4,多重虚拟继承,此时若子类有虚函数则加上一个自身的虚表指针的大小,(若没有则不叫)再加上自身的成员变量大小,还要加上 一个公用的虚类指针(不管有几个虚拟父类,只加一个),在加上所有父类的大小。

5、普通、虚拟混合多继承,此时子类的大小为自身大小(若子类或普通父类有虚函数,则为成员变量+虚表指针大小;若都没虚函数,则就为成员变量大小),加上一个虚类指针大小,在加上虚拟父类的大小,在加上普通父类的大小(除虚表指针,因为它和子类公用一个虚表指针)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: