Здравствуйте, Аноним, Вы писали:
А>Объясниете пожалуйста: А>Чем отличается наследование реализации от включения:
А>class B: public A А>{ А> //Методы А доступны из В, а также из клиентов В А>};
А>или
А>class В А>{ А> private: А> А obg;// Включение; методы А так же доступны из B, но не из клиентов В А>};
А>Поясните чем одно отличается от другого (по существу) А>и в каких случаях какой вариант является более предпочтительным.
А>Заранее благодарен всем!
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) для разрабатываемой программы.
Пытаюсь понять по какому принципу представлять сущности предметной области в виде классов...
По моей логике каждой отдельной сущности соответствует класс. Если у нескольких сущностей есть
что-то общее — то нужно это общее представить в виде базового класса (так учит Страуструп) потомки
которого будут детализировать поведение его методов.
Какая в этом свете разница между наследованием и включением — поясните плиз...
Здравствуйте, Аноним, Вы писали:
А>Есть ли принципиальная разница?
Есть.
Включение — это отношение has a (имеет).
Наследование — это отношение is a (является).
А>Я просто пытаюсь постороить диаграмму классов (в Rational Rose) для разрабатываемой программы. А>Пытаюсь понять по какому принципу представлять сущности предметной области в виде классов... А>По моей логике каждой отдельной сущности соответствует класс. Если у нескольких сущностей есть А>что-то общее — то нужно это общее представить в виде базового класса (так учит Страуструп) потомки А>которого будут детализировать поведение его методов. А>Какая в этом свете разница между наследованием и включением — поясните плиз...
Т.е. автомобиль имеет руль, колеса и т.д. и т.п.
И автомобиль является транспортным средством.
Подходи с точки зрения предметной области — какие реально взаимоотношения между объектами.
Здравствуйте, Аноним, Вы писали:
А>Объясниете пожалуйста: А>Чем отличается наследование реализации от включения:
А>class B: public A А>{ А> //Методы А доступны из В А>};
А>или
А>class В А>{ А> private: А> А obg;// Включение; методы А так же доступны из B А>};
А>Поясните чем одно отличается от другого (по существу) А>и в каких случаях какой вариант является более предпочтительным.
А>Заранее благодарен всем!
Все в том же Страуструпе есть про разницу.... принципиальную...
Производный класс нельзя создать от неизвестного класса. Во время компиляции его тип должен быть точно известен. Если есть член класса — ссылка или указатель, то ей(ему) можно присвоить значение указывающее на производный класс.
Пример
class A: public Base
{
};
class B
{
Base *object; // можно проинициализировать производным от Base классом,
// кроме того "has a" подразумевает возможность того что этих Base много
};
Кроме того при наслежовании ты может специфицировать тип наследования....