Tôi có một câu hỏi về đa thừa kế của chức năng được bảo vệ và đa hình. nó khá khó để mô tả nó vì vậy tôi hy vọng nó sẽ được rõ ràng, đủ.đa kế thừa được bảo vệ với đa hình
phép nói rằng tôi có ba lớp:
class baseClass
{
protected:
virtual int function() = 0;
};
class derived_A:public baseClass
{
int function()
{
//implementation 1
};
}
class derived_B:public baseClass
{
int function()
{
//implementation 2
};
}
class derived_C:public derived_A, public derived_B
{
baseClass ** p_arr; //array of pointers of baseClass kind (polymorphism)
int x=0;
for (int i=0; i<arraySize; i++) // array size = many classes like derived_A, derived_B...
{
x = p_arr[i]->function(); //I already have function that builds this array
//it is not the question so I didn't put it here.
// process x
}
cuối cùng question- tôi làm thế nào tôi có thể truy cập "chức năng bảo vệ()" từ lớp derived_C (bên trong vòng lặp for)? Tôi hơi bối rối .. và sẽ rất vui khi được giải thích.
cảm ơn.
}
cảm ơn bạn đã trả lời chi tiết của bạn! Tôi đã cố gắng bắt đầu với giải pháp đầu tiên của bạn tuyên bố hàm là bạn: tại BaseClass: friend int derived_c :: function(); nhưng tôi nhận được lỗi này: 'derived_C': không phải là tên lớp hoặc không gian tên tại sao tôi nhận được thông báo này? – user1673206
cũng vậy, nếu tôi thêm #include BaseClass, nó sẽ bao gồm hình tròn và "thiết kế xấu" như tôi đã thấy trên các bài đăng khác ... hoặc có thể tôi đã sai? – user1673206
Theo như tôi biết, không thể khai báo một phương thức bạn bè trong một lớp không khai báo. Vì vậy, chỉ cần làm cho toàn bộ 'derived_C' lớp một người bạn. Tôi đã thêm cú pháp để làm điều đó. – anatolyg