虚基类的作用是什么 什么叫做虚基类?
什么叫做虚基类?
什么叫做虚基类?
,也就是说,编译器不能确定您是否在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。使用虚拟继承:虚拟继承也称为共享继承。这种共享实际上是在编译过程中实现的。当使用虚拟继承时,上面的程序将变成如下形式:class ca.
虚基类的作用是什么?
语法中有抽象类和虚拟基类,这并不意味着你必须使用它们。我通常不使用花哨的东西。
我可以考虑使用抽象类,也许可以利用这个优势:
具有纯虚拟函数的类是抽象类。这个函数实际上并没有在基类中使用,它只是通知编译器:
在这里声明一个虚拟函数,让它在派生类中定义。为类族提供公共接口。
例如,要计算平面形状的面积,在抽象类基类中,virtualfloatarea()const=0
派生类三角形和派生类圆定义了面积()的具体计算。一旦我们有了一个派生的三角形或圆,我们就可以使用相同的函数名。Area()计算面积。
虚拟基类的构造应在派生类中完成,并且应在派生类本身的构造之前完成。当存在派生类1、派生类2和生成的派生类12时,派生类12只执行一次虚拟基类的构造。虚拟基类只有一个对象。至于它的特殊用途,我没想到。
创建子类对象时,子类和父类的构造函数执行顺序是什么?
继承时,构造函数的调用顺序为:1。如果继承虚拟基类,则首先调用虚拟基类的构造函数。如果有多个虚拟基类,请按顺序调用它们。
2. 如果基类是继承的,则调用基类的构造函数;如果有多个基类,则按顺序调用它们。三。如果类中定义了成员对象,则调用成员对象的构造函数;如果有多个成员对象,则按成员对象定义的顺序调用;4。调用自己的构造函数;析构函数的调用顺序相反。
虚基类的作用是什么 抽象类的作用和意义 虚基类和抽象类的区别
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。