虚基类是抽象类吗 设置虚基类的目的?
浏览量:2973
时间:2021-03-16 10:20:38
作者:admin
设置虚基类的目的?
其目的是消除歧义。
当多个继承路径上存在公共基类时,在多个路径的汇合处,公共基类将生成多个实例(或多个副本)。如果只想保存基类的一个实例,可以将公共基类描述为虚拟基类。
虚拟基类的基本原则是在内存中只有其成员的一个副本。这样,通过将基类继承声明为虚继承,只能继承基类的一个副本,从而消除了歧义。使用虚拟限定符将基类继承描述为虚拟的。
什么叫做虚基类?
什么叫做虚基类?
,也就是说,编译器不能确定您是否在D中。在f()中调用哪个函数f。这可能会让人觉得有点奇怪。命名只定义了一个CA::F。因为每个人都从CA派生,所以它自然地被称为CA::F。为什么我们不能确定呢?
这是因为编译器在编译时需要确定子类的函数定义。例如,确定CA::F。然后,在编译CB和CC时,它还需要在编译器的语法树中生成CB::F、CC::F和其他标识符。然后,在编译CD时,由于CB和CC有一个函数f,编译器将尝试生成这两个CD::f标识符。很明显,此时会报告错误,为时已晚。
(当我们不使用CD::F时,不会生成上述任何标记,因此如果我们删除D.
要解决此问题,有两种方法:
1。重载函数f():此时由于我们已经明确定义了CD::f,编译器在检查CD::f()调用时不需要一步一步生成CD::f label;
此时CD的元素结构如下:| CB(CA)|
]| CC(CA)|
,所以sizeof(CD)=8(CB和CC各有一个元素K)
2。使用虚拟继承:虚拟继承也称为共享继承。这种共享实际上是在编译过程中实现的。当使用虚拟继承时,上述程序将变成以下形式:类ca。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。