5

ここの例は意味がありませんが、これは基本的に私が Python でプログラムを書いた方法であり、現在は C++ で書き直しています。私はまだ C++ での多重継承を把握しようとしています。ここで行う必要があるのは、C のインスタンスを介して main から 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’
4

1 に答える 1

12

「仮想」だけでなく「パブリック仮想」を使用して、B または C のいずれかが A から継承されるようにします。それ以外の場合は、非公開で継承されていると見なされ、 main() は A のメソッドを認識しません。

于 2009-10-10T21:39:24.020 に答える