Здравствуйте, ssi, Вы писали:
ssi>Здравствуйте, Wind, Вы писали:
W>>Позор на мою не седую голову, программировал-программировал, а это не помню...
W>>Чем отлечается наследование класов в режимах PUBLIC, PROTECT, PRIVATE.?
ssi>public наследование: ssi>атрибуты доступа сохраняются в классе наследнике: если в базовом классе метод или член public, то в наследнике тоже public; если в базовом — protected, то в наследнике — protected; если в базовом private, то в наследнике — private.
ssi>protected наследоваине: ssi>public методы и члены базового класса становятся protected у наследника; остальное то же, что и при public наследовании: ptotected — protected, private — private.
ssi>private наследование: ssi>все методы и члены базового класса стоновятся private у наследника.
а зачем нужно protected-наследование, можешь прочитать в соседнем топике
Здравствуйте, Wind, Вы писали:
W>Позор на мою не седую голову, программировал-программировал, а это не помню...
W>Чем отлечается наследование класов в режимах PUBLIC, PROTECT, PRIVATE.?
К public можно обращаться из любой функции программы, к private — только из функций-членов данного класса, а к protected — из функций-членов данного класса и его производных.
Здравствуйте, Wind, Вы писали:
W>Позор на мою не седую голову, программировал-программировал, а это не помню...
W>Чем отлечается наследование класов в режимах PUBLIC, PROTECT, PRIVATE.?
public наследование:
атрибуты доступа сохраняются в классе наследнике: если в базовом классе метод или член public, то в наследнике тоже public; если в базовом — protected, то в наследнике — protected; если в базовом private, то в наследнике — private.
protected наследоваине:
public методы и члены базового класса становятся protected у наследника; остальное то же, что и при public наследовании: ptotected — protected, private — private.
private наследование:
все методы и члены базового класса стоновятся private у наследника.
Здравствуйте, ssi, Вы писали:
ssi>public наследование: ssi>атрибуты доступа сохраняются в классе наследнике: если в базовом классе метод или член public, то в наследнике тоже public; если в базовом — protected, то в наследнике — protected; если в базовом private, то в наследнике — private.
То в наследнике ты его не увидишь на то он и приват...
Тоже для остальных случаев.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, ssi, Вы писали:
ssi>>public наследование: ssi>>атрибуты доступа сохраняются в классе наследнике: если в базовом классе метод или член public, то в наследнике тоже public; если в базовом — protected, то в наследнике — protected; если в базовом private, то в наследнике — private. WH>То в наследнике ты его не увидишь на то он и приват... WH>Тоже для остальных случаев.
Ещё по Саттеру добалю: public наследование выражает отношение "является", а остальные два типа -- нет, какое-либо другое, например, "использует", или
class A
{
...
};
class B: public A // класс B может полностью заменить A, т.е. "является" A
{
...
};
class С: private A // класс С не может использоваться как A
{
...
};
Здравствуйте, Wind, Вы писали:
W>Позор на мою не седую голову, программировал-программировал, а это не помню... W>Чем отлечается наследование класов в режимах PUBLIC, PROTECT, PRIVATE.?
1. При открытом наследовании доступ к базовому классу является открытым, то есть реализуется отношение A "является" B (поддерживается полиморфизм).
2. При закрытом наследовании доступ к базовому закрыт, и использование методов и свойств базового класса доступно только из первого потомка и закрыто для доступа извне. В этом случае реализуется отношение "использует". Лично я предпочитаю закрытое/защищенное агрегирование закрытому и защищенному наследованию.
3. Механизм защищенного налледования аналогичем закрытому с той лишь разницей, что методы и свойства базового класса будут доступны из всех потомков.
Здравствуйте, jazzer, Вы писали:
ААД>> Лично я предпочитаю закрытое/защищенное агрегирование закрытому и защищенному наследованию. J>У наследования есть одно неоспоримое преимущество — виртуальные функции.
Здесь не буду спорить, к тому-же плюсом наследования можно посчитать простое открытие нескольких, но не обязательно всех методов и свойств базового класса через using BaseClass::Method.
Однако из практики должен заметить, что чаще всего производный объект "является" одним базовым, а "использует" второй. Здесь уже множественное наследование.
А вот о том, стоит ли использовать множественное наследование в своих проектах, более того, не является ли это дурным тоном, сказано уже достаточно. Это, как говорится, каждый для себя сам решает.
К тому-же, запрет множественного наследования классов в новых языках, вроде Java и C#, тоже о чем-то говорит. Стоит ли использовать то, что отмирает. Хотя это уже из области философии.