菱形继承时 若没有使用条件编译及虚继承, 为什么会出现重定义啊!!
菱形继承时 若没有使用条件编译及虚继承, 为什么会出现重定义啊!! |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
你好。假设有a类为根类,另有两个类b,c分别继承了a,那么同时b,c也继承了a中的成员以及成员函数。此时通过多重继承的方法让d继承自b,c这就产生了所谓的菱形继承。
假设a中有一公有方法init();
b,c继承自a也都有init方法;
d继承自b,c;
此时假设用d生成对象x,x调用init()。编译器将会产生疑惑,这个init到底是b中的init还是c中的init,因为两者看上去是一样的(都继承自a)。
正是由于这个原因,所以才使用虚继承,保证后面不出现二义性。 |
|
|
|
|