Ví dụ ở đây không có ý nghĩa, nhưng về cơ bản tôi đã viết chương trình bằng Python như thế nào, và bây giờ tôi viết lại nó trong C++. Tôi vẫn cố gắng nắm bắt nhiều thừa kế trong C + +, và những gì tôi cần làm ở đây là truy cập A :: a_print từ chính thông qua thể hiện của C. Dưới đây bạn sẽ thấy những gì tôi đang nói về. Điều này có thể không?Truy cập vào một thành viên/phương thức của lớp dẫn xuất ảo
#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();
}
Đây là lỗi biên dịch.
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’
Bingo. Điều đó có nó. Cảm ơn. – Scott
Đó là một điểm tốt: Đó là đủ để làm cho một trong hai con đường thừa kế công khai để cấp quyền truy cập. Con đường thực hiện là con đường cung cấp khả năng truy cập nhiều nhất. –