具有指针转换和虚拟继承的多重继承

时间:2013-01-31 09:55:49

标签: inheritance

请解释为什么以下代码的O / P存在差异...... 1 GT;当虚拟继承用于A类和B类时,则调用B :: f 2 - ;当A和B没有虚拟继承时,则称L :: f为

如果对虚拟和非虚拟函数使用虚拟继承/非虚拟继承和指针转换的不同组合,那么很少有o / p OR错误肯定会让您感到惊讶。

这就是为什么我在寻找c ++编译器始终遵循的一些通用规则。换句话说,如何在不编译代码或运行代码的情况下预测o / p OR错误。

#include <iostream>
using namespace std;

class L{
    public :
    virtual void f(){
    cout<<"L::f()"<<endl;
    }
};

class A: public virtual L{
    public : 
    /*
    virtual void f(){
    cout<<"A::f()"<<endl;
    }
    */
};

class B : public virtual L{
    public :
    virtual void f(){
        cout<<"B::f()"<<endl;
    }
};

class C : public B, public A {
    public :
    /*
    virtual void f(){
        cout<<"C::f()"<<endl;
    }
    */
};

int main(){

    A* ptr = new C();
    ptr->f();
    return 0;
} 

0 个答案:

没有答案