2016-09-10 1 views
-2

Предположим, что у меня есть три класса A, B и C. класс B наследует от класса A, а наследование является приватным, тогда как класс C наследует от B, а наследование является общедоступным. Теперь класс A имеет защищенную функцию, к которой хочет получить доступ класс C. Итак, что должно быть сделано в классе B, чтобы сделать это защищенная функция доступна для класса C.C++ Многоуровневое наследование, полиморфизм

Вот ссылка на код: http://pastebin.com/9E2sLZzj

+1

Если вы еще этого не сделали, пожалуйста, уделите некоторое время, чтобы прочитать [страницы справки] (http://stackoverflow.com/help), особенно разделы с именем [«Какие темы я могу задать? здесь? "] (http://stackoverflow.com/help/on-topic) и [«Какие типы вопросов я должен избегать?»] (http://stackoverflow.com/help/dont-ask). Также, пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask), и узнайте, как создать [Минимальный, Полный и Подтверждаемый пример] (http: // stackoverflow .com/помощь/mcve). –

+0

Когда 'B' наследует конфиденциально от' A', тогда защищенные члены 'A' становятся частными в' B'. Теперь, когда 'C' наследует от' A', вы хотите получить доступ к этому частному члену. Таким образом, ваша проблема сводится к найти способ доступа к закрытым членам из подкласса, который, я думаю, не доступен и даже если он доступен, не является хорошей идеей. –

ответ

0

«Использование» ключевые слова делает член наследуемого класса виден, и разрешима, в рамках своего подкласса. Таким образом, чтобы сделать частный унаследованный элемент доступным для подклассов B «s:

class A { 

protected: 

    void foo() {} 
}; 

class B : private A { 

protected: 

    using A::foo; 
}; 

class C : public B { 

    void bar() 
    { 
     foo(); 
    } 
}; 
+1

Код только ответ? Пожалуйста, объясните это –

+0

Класс 'C' наследует от' A', в то время как OP хочет 'C' наследовать от' B' –

0

Хорошо я получил решение Этот фрагмент кода работал после вставки его в класс B.

int get(){ 
    return A::get(); 
} 

Не уверен, что он действительно, хотя