C++ c++;多继承序与虚函数

C++ c++;多继承序与虚函数,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,继承具有相同功能的类的顺序重要吗 class A { public: virtual void f1() = 0; virtual void f2() = 0; }; class B : public A { public: virtual void f1() { globalF1_B(); } virtual void f2() { globalF2_B(); } }; class C : public A { public: virtual v

继承具有相同功能的类的顺序重要吗

class A {
public:
    virtual void f1() = 0;
    virtual void f2() = 0;
};

class B : public A {
public:
    virtual void f1() { globalF1_B(); }
    virtual void f2() { globalF2_B(); }  
};

class C : public A {
public:
    virtual void f1() { globalF1_C(); }
};

class D : public A, public B, public C { };

class E : public A, public C, public B { };
如果我像下面这样写的话,
D
E
类是否相同:

class D{
public:
    virtual void f1() { globalF1_C(); }
    virtual void f2() { globalF2_B(); }   
};
class E {
public:
    virtual void f1() { globalF1_B(); }
    virtual void f2() { globalF2_B(); }   
};

PS.I继承类
A
到类
D
和类
E
,以防我忘记实现类A的功能。

不,它们不一样。除了提供的C++代码无效之外,我们还可以说:

在第一种情况下,类D和E有两个方法
f1()
(一个从B继承,一个从C继承)和一个方法
f2()
(从C继承)。如果您能够构造一个D对象名D,那么
D.f1()
将被报告为一个歧义,您需要通过以下方式进行澄清:
D.B::f1()
或这一个
D.C::f1()

而在第二种情况下,类只有两个方法
f1()
f2()

#包括
使用名称空间std;
甲级{
公众:
虚空f1()=0;
虚空f2()=0;
};
B类:公共A{
公众:

虚空f1(){cout不,D&E的第一个版本也不会编译。在D和E

中解析f1和f2会有歧义,但如果所有函数都是虚函数,它没有加载最后的函数实现吗?如果调用D.f1();D.f2();E.f1();或E.f2();(然后像在第一个代码段中那样编写)会有什么结果?最后一个问题:继承顺序重要吗?似乎你在继承方面是错的……如果你有一个类a和一个f方法,并且你在f重载的情况下将它派生到类B,这意味着在类B中你必须使用方法f,而不是一个……在类B中你有一个f1,在C中你有一个f1,在D中你两者都有。我可以建议你可以读一些关于C++中继承的好书,但是所有这些函数都是虚的,而类<代码> A<代码>甚至没有<代码> f>代码>实现。你肯定你是正确的吗?<代码> A <代码>没有实现,但是<代码> B <代码>有“<代码> C <代码>。你定义了他们的代码!测试我的代码…我实际上想让D类和E类成为使用上一个继承函数的版本。看起来像我的脸。顺便说一句,谢谢!
#include <iostream>
using namespace std;

class A {
public:
    virtual void f1() = 0;
    virtual void f2() = 0;
};

class B : public A {
public:
  virtual void f1() { cout << "B::f1()" << endl; }
  virtual void f2() { cout << "B::f2()" << endl; }  
};

class C : public A {
public:
  virtual void f1() { cout << "C::f1()" << endl; }
  virtual void f2() { cout << "C::f2()" << endl; }  
};

class D : public B, public C { };

class E : public C, public B { };

int main() {
  D d;
  // d.f1(); // t.cpp:28:5: error: member 'f1' found in multiple base classes of different types
  d.C::f1();
  d.B::f1();
}