Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше унаследовать "точка круг цилиндр", наследование, полиморфизм 
V
    Опции темы
PashaLost
Дата 6.11.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.1.2008

Репутация: нет
Всего: нет



Возможно эта тема уже тысячу раз обсуждалась, но к сожалению, ответа на неё я не нашёл. 
Итак. Нужно построить иерархию точка, круг, цилиндр.  Дейтел по этому поводу советует воспользоваться public наследованием и всё. Слышал я, что это не очень красиво, ибо точка это никак не круг, а круг это никак не цилиндр. Так каким наследованием унаследовать точку, круг и ?... Или не использовать наследование вовсе ? Тогда как их лучше связать?
PM MAIL   Вверх
Lateralus
Дата 6.11.2011, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 5.11.2011

Репутация: нет
Всего: нет



Точка,круг,эллипс-по-моему, лучше так.
PM MAIL   Вверх
bsa
Дата 6.11.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(PashaLost @  6.11.2011,  21:10 Найти цитируемый пост)
Слышал я, что это не очень красиво, ибо точка это никак не круг, а круг это никак не цилиндр.

все верно. это вообще разные объекты, которые имеют разные свойства и поведение.
Цитата(PashaLost @  6.11.2011,  21:10 Найти цитируемый пост)
Так каким наследованием унаследовать точку, круг и ?...
никак

Цитата(PashaLost @  6.11.2011,  21:10 Найти цитируемый пост)
Тогда как их лучше связать?
опять никак. точка - это одномерный объект, круг - двумерный, а цилиндр - трехмерный.

В принципе, круг - это вырожденный случай цилиндра (высота нулевая), а точка - вырожденный случай круга (радиус нулевой). Так что, это по сути один класс, но три разных объекта.

PM   Вверх
PashaLost
Дата 6.11.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.1.2008

Репутация: нет
Всего: нет



ну хорошо, передо мной стоит конкретная задача, связать эти три объекта в иерархию. Как мне это сделать, если обходиться без наследования ? 

Это сообщение отредактировал(а) PashaLost - 6.11.2011, 20:45
PM MAIL   Вверх
newbee
Дата 6.11.2011, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Код

class point{
double x,y; // coords
}

class ellipse{
//тут описываешь формулу эллипса, в качестве длин используешь double,
//координатных точек - класс point.
}

class cylinder{
//аналогично, используя point и ellipse описываешь формулу цилиндра
}



--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 6.11.2011, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



PashaLost, иерархия подразумевает наследование. Если дано такое некорректное задание, то придется давать на него ответ: точка имеет три атрибута: X,Y,Z; и один виртуальный метод: нарисоваться. Круг добавляет атрибут радиус и углы наклона плоскости (в которой он размещен) относительно осей координат; переопределяет метод "нарисоваться". Цилиндр добавляет к кругу атрибут высота и переопределяет метод "нарисоваться".
PM   Вверх
PashaLost
Дата 6.11.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.1.2008

Репутация: нет
Всего: нет



А если я создам класс ФИГУРА, с полями X и Y.  Создам также классы ТОЧКА и КРУГЛАЯ ФИГУРА, которые будут открыто наследоваться от класса ФИГУРА. Класс Круглая фигура будет содержать в себе радиус. Создам классы КРУГ и ЦИЛИНДР, которые будут открыто наследоваться от класса КРУГЛАЯ ФИГУРА. Цилиндр будет содержать в себе только высоту. ??? 
PM MAIL   Вверх
mes
Дата 6.11.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цилиндр не круглая фигура.. 



--------------------
PM MAIL WWW   Вверх
PashaLost
Дата 6.11.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.1.2008

Репутация: нет
Всего: нет



Кстати, newbee, а что означает твой статус БРЕВНО ???

Добавлено через 1 минуту и 6 секунд
очень даже круглая, в ней ведь ЕСТЬ радиус и его (цилиндр), как и круг, можно спокойно покатить, значит круглая  smile 
PM MAIL   Вверх
mes
Дата 6.11.2011, 21:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(PashaLost @  6.11.2011,  19:10 Найти цитируемый пост)
 Тогда как их лучше связать?

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

Добавлено @ 21:20
Цитата(PashaLost @  6.11.2011,  20:18 Найти цитируемый пост)
очень даже круглая, в ней ведь ЕСТЬ радиус и его (цилиндр), как и круг, можно спокойно покатить, значит круглая

тогда и машина круглая, ведь ее колеса круглые и она еще катится..


Это сообщение отредактировал(а) mes - 6.11.2011, 21:23


--------------------
PM MAIL WWW   Вверх
bsa
Дата 6.11.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(PashaLost @  6.11.2011,  22:18 Найти цитируемый пост)
очень даже круглая, в ней ведь ЕСТЬ радиус и его (цилиндр), как и круг, можно спокойно покатить, значит круглая

есть понятие "тело вращения". Но оно относится только к трехмерным объектам. Кстати, эллипс - не подходит к твоей круглой фигуре.
PM   Вверх
PashaLost
Дата 6.11.2011, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.1.2008

Репутация: нет
Всего: нет



я не знаю, кто приплёл этот эллипс, мне он не нужен. 
А вот кстати что у меня получилось, вроде всё работает ... но правильно ли я всё сделал ... 
Код

class Figure {                        
public:
    Figure(float, float);
    Figure();
    ~Figure();                                            
    void setXY(float, float);
    virtual void print() const=0;
protected:                                        
    float x;
    float y;
};

class Point: public Figure {                        
public:
    Point(float, float);
    Point();
    ~Point();                                            
    virtual void print() const;
};

class Round: public Figure {                        
public:
    Round(float, float, float);
    Round();
    ~Round();        
    void setR(float);
    virtual void print() const=0;
protected:
    float r;
};

class Circle: public Round {                        
public:
    Circle(float, float, float);
    Circle();
    ~Circle();                                            
    virtual void print() const;
};

class Cylinder: public Round {                        
public:
    Cylinder(float, float, float, float);
    Cylinder();
    ~Cylinder();    
    void setH(float);
    virtual void print() const;
private:
    float h;
};

PM MAIL   Вверх
borisbn
Дата 6.11.2011, 22:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



PashaLost, IMHO в этой иерархии Round лишний.
А задание, действительно, совершенно некорректное


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
de_Nis
Дата 6.11.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старательный
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 19.10.2006
Где: Молдова

Репутация: нет
Всего: 6



Цитата(PashaLost @  6.11.2011,  20:10 Найти цитируемый пост)
 Нужно построить иерархию точка, круг, цилиндр

Может быть, имеет смысл почитать в книге
Миронченко Андрей Императивное и ООП программирование на Turbo Pascal и Delphi
раздел 16.5 Агрегация классов. Привожу выдержку:
"... В следующем примере мы построим 3 класса, описывающие геометрические фигуры в трехмерном пространстве: точка, круг и шар, используя агрегацию..."
И далее подробно описано, как и почему созданы классы, как они связаны друг с другом. Не думаю, что понимание кода на Паскале будет затруднительно - важна идея.
P.S. По поводу названия книги не уверен, автор указан точно. Книга есть в Сети.

--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет…
PM   Вверх
newbee
Дата 6.11.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(PashaLost @  6.11.2011,  23:09 Найти цитируемый пост)
я не знаю, кто приплёл этот эллипс, мне он не нужен. 
Я приплела, ведь окружность - частный случай эллипса. И вот тут было бы корректно использовать наследование эллипс-окружность.

Кстати, ТС, вон выше пишут о книге, где советуют использовать агрегацию. Выше я приводила код - как раз оно самое smile

ЗЫ, А бревно.. Ну потому что бревно.


--------------------
You're face to face
With man who sold the world
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.