2011-01-07 3 views
0
class baseClass{}; 
class derivedClass : public baseClass{}; 
baseClass *obj = new derivedClass ;  // For simplicity, I amn't providing any- 
             // class members. 

Хотя, baseClass и derivedClass конструкция имеет место, derivedClass члены непрозрачны для obj. Тогда, каково использование строительства derivedClass. Кстати, я понимаю, что конструктор 5 вызывает конструктор baseClass и по возвращении derivedClass строительство должно иметь место. Что это такое? Просто любопытно узнать, почему она сконструирована таким образом :)Применение производного класса конструкции, когда объект класса производного является тип совместим с базовым классом

ответ

1

Одним словом, полиморфизм. Другими словами, в системе, где несколько классов производятся из общего базового класса, это способность обрабатывать объекты разных производных классов одинаково, не беспокоясь об их реальном типе.

Рассмотрите пакет чертежей, который управляет различными формами. Вы можете использовать абстрактный базовый класс Shape, который реализует общие методы, такие как Draw(), и, возможно, имеет некоторые общие элементы данных, общие для всех форм, таких как x-pos и y-pos. Затем вы можете создать некоторые производные конкретные классы, такие как Ellipse и Square, которые будут принимать свои собственные параметры конструктора и переопределить метод Draw() из абстрактного класса. Например, конструктору Circle может понадобиться x-pos, y-pos и радиус; он будет использовать параметр radius, но передайте аргументы x-pos и y-pos унаследованному конструктору.

Затем вы можете реализовать класс Drawing(), который выступает в качестве контейнера различных фигур, и прокручивать этот контейнер для рендеринга вашего рисунка, не беспокоясь о фактическом типе конкретных фигур, которые вы рисуете.

+0

+1 Это в значительной степени то, что я пытался сказать, кроме бесконечно более четко сформулированных. – templatetypedef

0

Обоснование почему derivedClass члены инициализируются происходит потому, что если derivedClass имеет виртуальные функции, которые замещают, объявленные в baseClass и тех членах ссылаются элементами данных derivedClass, инициализация должна произойти или, когда эти функции будут вызваны, результаты будут неопределенными.

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

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