我正在阅读有关继承的内容,并且有一个主要问题,我几个小时都无法解决:
给定一个类Bar
是一个类virtual
功能,
class Bar
{
virtual void Cook();
};
两者有什么不同:
class Foo : public Bar
{
virtual void Cook();
};
and
class Foo : public virtual Bar
{
virtual void Cook();
};
?经过几个小时的谷歌搜索和阅读,我得到了很多关于它的用途的信息,但没有一个真正告诉我两者之间的区别,这让我更加困惑。
就功能而言,这两个版本之间没有太大区别。与案例virtual
继承,每个实现一般都会加一个(vptr
像)指针(与以下情况相同virtual
功能)。这有助于避免由于多重继承而生成多个基类副本(钻石传承 http://en.wikipedia.org/wiki/Diamond_inheritance问题)
Also, virtual
遗产委托调用其基类构造函数的权利。例如,
class Bar;
class Foo : public virtual Bar
class Other : public Foo // <--- one more level child class
So, now Bar::Bar()
将直接从调用Other::Other()
也将在其他基类中排名第一。
This 代表团功能有助于实现final class
(在 Java 中)C++03 中的功能:
class Final {
Final() {}
friend class LastClass;
};
class LastClass : virtual Final { // <--- 'LastClass' is not derivable
...
};
class Child : public LastClass { // <--- not possible to have object of 'Child'
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)