Сегодня на паре преподаватель дал мне задание написать иерархию. Я составил ее так:
Code
class point { public: //Конструкторы и методы доступа private: short x, y }:
class line { public: //Конструкторы и методы доступа private: point start, end; };
//И так далее - четырехугольник содержит в себе 4 линии....
Но мне все кажется, что это немного не то и под словом "иерархия" он имел введу наследование. Хотя мне мой вариант кажется логичнее. Правильно ли я сделал? Если нет, как было бы правильно составить иерархию?
Сообщение отредактировал SWFcreator - Четверг, 26 Января 2012, 19:09
class Animals extends Zoo (){ // наследование "животное" от "зоопарка" // то бишь пользуются методами представленными "родителем" но и добавляют свои }
class Dog extends Animals (){} // итд.
А у тебя просто перечисление классов.
Сообщение отредактировал Coment - Четверг, 26 Января 2012, 20:36
В том то и дело, я знаю, что это не иерархия, но, плохо себе представляю, как она должна выглядеть. Допустим, класс точка с коорд. х, у. Линия, в моем понимании должна иметь в себе две точки - начало и конец, то есть, производный линия должен вмещать в себе дополнительно х2, у2 или же объект точки. По-моему, как то это некрасиво, гораздо удобнее оперировать двумя объектами точки. А с четырехугольником вообще страшно представить. Но препод сказал именно иерархию и мне кажется, я чего то не догоняю, кто что посоветует?
Ну обычно под иерархией геометрических фигур понимается что-то вроде этого.
class shape{ //--- public: point center; virtual void Draw(void); //--- }
class Ractangle: public shape{ //--- point p1, p2; virtual void Draw(void); //--- };
class Triangle: public shape{ //--- point p1, p2, p3; virtyal void Draw(void); //--- };
class Circle: public shape{ //--- virtual void Draw(void); //--- };
ну и т.д. На основе этого можно полиморфизм замутить
shape shapes[3]; //--- shape[0] = new Ractangle(...); shape[1] = new Triangle(...); shape[3] = new Circle(...); //--- for(int i = 0; i < 3; ++i){ shape[i].Draw(); }
ну и т.д. Хотя то что ты написал (члены классов содержат другие классы) тоже иерархия. Хотя такую иерархию (иерархию владения), обычно называют агрегацией.
Сообщение отредактировал Matou - Четверг, 26 Января 2012, 21:57
Monteg, да, с зоопарком и мне понятно. Coment, спасибо. Matou, спасибо, классный код, но ты используешь точку в форме, а мне, как я понял, нужна последовательная иерархия прямиком от класса точки, еще должна быть линия. Вообще, можно наследовать линию от точки и использовать в форме, как ты это сделал, но это уже 2 иерархии, зато смотрится куда лучше.
Жудко банальный код, можно найти в любом более-менее толковом учебнике по С++
Quote (SWFcreator)
Вообще, можно наследовать линию от точки и использовать в форме, как ты это сделал, но это уже 2 иерархии, зато смотрится куда лучше.
Я мысль не совсем понял, но мне кажется что не стоит наследовать линию от точки.
Quote (SWFcreator)
ты используешь точку в форме
Точка в фигуре служебная, она нужна для того чтобы у всех фигур было что-то общее, что-то что позволит работать с любой фигурой не зависимо от того какой именно, т.е. отношения к геометрии фигуры эти данные не имеют, в данном случае это просто точка относительно которой задаются другие точки фигуры и относительно нее же рисуется фигура. Так фигуры можно не только рисовать, но еще вращать и перемещать, например:
class shape{ //--- public: point center; virtual rotate(degree); virtual moveTo(point); vitrual move(point); virtual void Draw(void); //--- }
class Ractangle: public shape{ //--- point p1, p2; virtual moveTo(point); vitrual move(point); virtual void Draw(void); //--- };
// теперь можно определить соответствующие виртуальные ф-ии void Ractangle::moveTo(point myPoint) { center = myPoint; }
void Ractangle::moveTo(point myPoint) { center += myPoint; }