重要的是你继承了 abstact classes 的顺序,它具有相同的功能吗?
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。我将 class A
继承到 class D
和 class E
,以防我忘记制作一些A类功能的实现。
答案 0 :(得分:1)
不,不一样。除了提供的无效C ++代码之外,我们可以说:
在第一种情况下,您的类D和E有两个方法f1()
(一个继承自B,一个继承自C)和一个方法f2()
(继承自C)。如果您能够构建D对象名称d,那么d.f1()
将被报告为歧义,您需要以这种方式澄清:d.B::f1()
或此d.C::f1()
。< / p>
在第二种情况下,您的课程只有f1()
和f2()
两种方法。
#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();
}
答案 1 :(得分:0)
不,第一版D&amp; E也不会编译。在D和E
中解析f1和f2会有歧义