Наследование или включение
От: Аноним  
Дата: 12.10.04 10:30
Оценка:
Объясниете пожалуйста:
Чем отличается наследование реализации от включения:

class B: public A
{
//Методы А доступны из В
};

или

class В
{
private:
А obg;// Включение; методы А так же доступны из B
};

Поясните чем одно отличается от другого (по существу)
и в каких случаях какой вариант является более предпочтительным.

Заранее благодарен всем!
Re: Наследование или включение
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.04 10:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Объясниете пожалуйста:

А>Чем отличается наследование реализации от включения:

А>class B: public A

А>{
А> //Методы А доступны из В, а также из клиентов В
А>};

А>или


А>class В

А>{
А> private:
А> А obg;// Включение; методы А так же доступны из B, но не из клиентов В
А>};

А>Поясните чем одно отличается от другого (по существу)

А>и в каких случаях какой вариант является более предпочтительным.

А>Заранее благодарен всем!
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Наследование или включение
От: Аноним  
Дата: 12.10.04 11:11
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Аноним, Вы писали:


А>>Объясниете пожалуйста:

А>>Чем отличается наследование реализации от включения:

А>>class B: public A

А>>{
А>> //Методы А доступны из В, а также из клиентов В
А>>};

А>>или


А>>class В

А>>{
А>> private:
А>> А obg;// Включение; методы А так же доступны из B, но не из клиентов В
А>>};

А>>Поясните чем одно отличается от другого (по существу)

А>>и в каких случаях какой вариант является более предпочтительным.

А>>Заранее благодарен всем!


Согласен, но это легко исправить:

class B: public A
{
//Методы А доступны из В, а также из клиентов В
};

или

class В
А>>{
А>> public:
А>> А obg;// Включение; методы А так же доступны из B, и из клиентов В[/b]
А>>};

Есть ли принципиальная разница?
Я просто пытаюсь постороить диаграмму классов (в Rational Rose) для разрабатываемой программы.
Пытаюсь понять по какому принципу представлять сущности предметной области в виде классов...
По моей логике каждой отдельной сущности соответствует класс. Если у нескольких сущностей есть
что-то общее — то нужно это общее представить в виде базового класса (так учит Страуструп) потомки
которого будут детализировать поведение его методов.
Какая в этом свете разница между наследованием и включением — поясните плиз...
Re[3]: Наследование или включение
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.04 11:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть ли принципиальная разница?


Есть.

Включение — это отношение has a (имеет).
Наследование — это отношение is a (является).

А>Я просто пытаюсь постороить диаграмму классов (в Rational Rose) для разрабатываемой программы.

А>Пытаюсь понять по какому принципу представлять сущности предметной области в виде классов...
А>По моей логике каждой отдельной сущности соответствует класс. Если у нескольких сущностей есть
А>что-то общее — то нужно это общее представить в виде базового класса (так учит Страуструп) потомки
А>которого будут детализировать поведение его методов.
А>Какая в этом свете разница между наследованием и включением — поясните плиз...

Т.е. автомобиль имеет руль, колеса и т.д. и т.п.
И автомобиль является транспортным средством.

Подходи с точки зрения предметной области — какие реально взаимоотношения между объектами.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: Наследование или включение
От: Аноним  
Дата: 12.10.04 11:42
Оценка:
Понял — СПАСИБО ОГРОМНОЕ!
Re: Наследование или включение
От: DangerDen  
Дата: 12.10.04 11:50
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Объясниете пожалуйста:

А>Чем отличается наследование реализации от включения:

А>class B: public A

А>{
А> //Методы А доступны из В
А>};

А>или


А>class В

А>{
А> private:
А> А obg;// Включение; методы А так же доступны из B
А>};

А>Поясните чем одно отличается от другого (по существу)

А>и в каких случаях какой вариант является более предпочтительным.

А>Заранее благодарен всем!


Все в том же Страуструпе есть про разницу.... принципиальную...
Производный класс нельзя создать от неизвестного класса. Во время компиляции его тип должен быть точно известен. Если есть член класса — ссылка или указатель, то ей(ему) можно присвоить значение указывающее на производный класс.
Пример

class A: public Base
{
};

class B
{
Base *object; // можно проинициализировать производным от Base классом, 
              // кроме того "has a" подразумевает возможность того что этих Base много
};


Кроме того при наслежовании ты может специфицировать тип наследования....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.