2015-03-21 3 views
0

Я рассматривал этот вопрос ниже в конце моей книги, и это немного озадачило меня. это было бы неверно?Частное наследство и доступ

В частном наследовании всех открытых и защищенных членов базового класса можно получить в производном классе, но они недоступны через производный класс.

+2

Это звучит в основном верно (в зависимости от значения «через производный класс».) Почему вы думаете, что это ложь? – juanchopanza

+0

Почему вы думаете, что это будет ложь? Разве это не должно произойти? – BitTickler

+0

Я повторял это много раз в качестве комментария к SO: если у вас есть какие-либо вопросы о том, как работает public/protected/private inheritance, это ссылка: http://stackoverflow.com/q/860339/3093378 (проверьте больше проголосованный ответ) Единственный тип наследования, который я не могу получить (и я действительно считаю более чем неясным), является «защищенным» наследованием. Может быть, кто-то может рассказать мне, почему это было бы полезно. Я голосую, чтобы закрыть ваш вопрос как afaik, это дубликат http://stackoverflow.com/q/860339/3093378 – vsoftco

ответ

1

Это правда. Подкласс может использовать методы базового класса внутри. Но методы базового класса не будут доступны из экземпляра производного класса.

void Subclass::baseClassMethodOverride() 
{ 
    useBaseClassMethod(); //<---- ALLOWED 
} 

int main() 
{ 
    SubClass instance; 
    instance.useBaseClassMethod(); //<-----NOT ALLOWED 
} 
1

Это правда.

Если у вас есть член public или protected вы можете получить к ним доступ в производном классе Вне зависимости от модификатора доступа наследования

1

То есть, по определению, что частное наследование. Например, N4140 объясняет:

§11.2/1 [...] Если класс объявлен базовый класс для другого класса, используя спецификатор private доступа, public и protected членов базовой класса доступны как private членов производного класса .

Кроме того,

§11/1 Член класса может быть

- private; то есть его имя может использоваться только членами и друзьями класса, в котором он объявлен.

Фраза «но не доступна через производный класс». немного расплывчато, но если предполагаемое значение «невозможно получить за пределами производного класса, за исключением friend s», то это правда.

Примечание: прочитайте спецификатор доступа как относящийся к наследованию. то есть частное наследование означает, что он наследует, является частным, а не тем, что он наследует частных членов.

Смежные вопросы