这里的例子没有意义,但这基本上就是我用Python编写程序的方式,现在我用C ++重写它。我仍然试图在C ++中掌握多重继承,我需要做的是从main到C的实例访问A :: a_print。下面你会看到我在说什么。这可能吗?
#include <iostream>
using namespace std;
class A {
public:
void a_print(const char *str) { cout << str << endl; }
};
class B: virtual A {
public:
void b_print() { a_print("B"); }
};
class C: virtual A, public B {
public:
void c_print() { a_print("C"); }
};
int main() {
C c;
c.a_print("A"); // Doesn't work
c.b_print();
c.c_print();
}
这是编译错误。
test.cpp: In function ‘int main()’:
test.cpp:6: error: ‘void A::a_print(const char*)’ is inaccessible
test.cpp:21: error: within this context
test.cpp:21: error: ‘A’ is not an accessible base of ‘C’
答案 0 :(得分:12)
使用“公共虚拟”而不是“虚拟”使B或C从A继承。否则,它被假定为私有继承,你的main()将不会看到A的方法。