![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| vitlic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Вопрос был задан на собеседование:
Имплементация класса Петух на с++, с подклассами, функциями и т.д. Собеседование проходило не в Росии, так что слово Петух добавочной смысловой нагрузки не несло Мое решение было приблизительно таким, а еще было много болтавни какие функции и куда добовлять..
Вопрос такой, как правильно нужно добавить конструкторы/ виртуальные деструкторы, виртуальные функции, какие классы должны быть абстрактными и т.д. На мой взгляд в этой иерархии все классы, кроме Rooster, должны быть абстрактными. Долго думал сделать или нет класс Animal пустым, но забыл в чем прелесть данного подхода.. Что вы думаете и какие функции вы бы добавили в эти классы? пи.си. Запостил сюды, а не в другой раздел, так как имплементация должна быть на с++, да и интересует именно возможности объектного ориентированного подхода с++ к этой задаче. Это сообщение отредактировал(а) vitlic - 2.4.2007, 19:27 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
да есть, в туалет ходить и размножаться это в бердс, энимал убрать вообще, не нужен он здесь, а в остальные по специфике уже добавляй, тут непонятно какой совет требуется |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Абстрактными - все классы, кроме самого нижнего в твоей иерархии.
У верхнего класса делаем виртуальный деструктор, как минимум. Вопрос: какие функции есть у петуха? это и определяет, что у него виртуальное, а что нет, и какие функции где впервые объявляются. это во флейм... по крайней мере у меня мозги на эту тему работают слабо Все вышеперечисленное, естественно, имхо. |
|||
|
||||
| vitlic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Просто интересно кто, что думает. Насчет разделения петуха и курицы: я описал класс петуха, а класс курицы на словах добавил. Но теперь понимаю, что это скорее всего ошибка, так как кем же быдет класс птенца? он должен наследовать от петуха и курицы, но и являться петухом или курицей такое наверно сделать не возможно с помощью oop. Это сообщение отредактировал(а) vitlic - 2.4.2007, 22:00 |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
ИМХО петух и курица разные классы ! Если труктуры можно сделать с флажком пола, то классы - точно разные. Классы содержат ПОВЕДЕНИЕ объекта, а какое у курицы поведение ?Кудахчет, несется... А петух - он же топчет ! Разный, разный класс. ;)
А так чего кому дабавить лучше всего у Дарвина прописано. Виртуальный деструктор сильно нужен, если ресурсы цепляешь в классе. А просто так он ни для чего. Кстати, не забудь - куры летают, только они летают только вниз ! (красота летают только - только летают. Че русский язык не вытерпит !). |
|||
|
||||
| vitlic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
С логической точки зрения согласен. Но тогда появляется вопрос, как быть с цыплятами. Хотя можно и не создавать для них отдельный класс. Думаю так даже верней! В любом случае петухи не несут яиц. Поэтому наверно и нужно два различных класса. Виртуальный деструктор нужен в любом случае, так как я ведь не уверен будут ли к объекту обращаться на прямую: Петух п; или через поинтер базового класса: Птица * птиц=&п; Если все обращения первого вида, то дефольтный деструктор подойдет, но если второго? |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Уговорил
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| vitlic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
В случае не виртуального деструктора при уничтожение объекта, через поинтер на базовый класс будет slicing, то бишь вызовется деструктор для базовой части производного объекта, а все остальное не разрушится. Если есть виртуальный деструктор, то обращение к нему идет через vtbl, и таким образом вызовется в начале деструктор производного, который сам в дальнейшем вызовет деструктор базового. А еще во многих книгах написано, если используется полиморфизм, то обязательно нужен виртуальный деструктор. Но если он не используется и создание объектов идет напрямую, то можно и без виртуальных деструкторов. Это сообщение отредактировал(а) vitlic - 2.4.2007, 23:34 |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
так будут вызваны оба деструктора, а не только деструктор Bird |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ого... Прям как солнце из-за туч... Я спрашиваю почему возникает вопрос, что дефолтный конструктор удовлетворяет в первом случае и неудовлетворяет во втором. Ведь решение что принято помоему однозначное. Разве объект Петух должен разрушаться поразному в первом и втором случае? Это сообщение отредактировал(а) Fazil6 - 3.4.2007, 00:19 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Не согласна. Нет контекста задачи. Если рассматривать кур в контексте корма для лис, то по барабану какой у них там пол. Или в контексте производства мыла из старой птицы. Или производства гуано... Или в контексте задачи, которую решали разрушители мифов, когда проверяли при стрельбе какой тушкой производятся бОльшие разрушения: замороженной или отмороженной. Не может быть построен хороший класс "петух вообще", без конкретизации задачи. -------------------- ... |
|||
|
||||
| vitlic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Earnest,
Они больше ничего и не объясняли, скорее всего проверяли не только знание OOP, но и абстрактное мышление, фантазию и т.д. |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Earnest, я не понимаю, почему ты не согласна, что я могу иметь личное мнение ? Там же написано, МОЕ. Кроме того, в иерархии классов, которая включает животные - птицы - курьи -... вряд ли они(куры) будут рассматриваться с точки зрения лисьей жратвы или пушечного снаряда.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Вот с ним (мнением) и не согласна. А не с тем фактом, что ты можешь иметь личное мнение. Имей. vitlic, я, конечно, понимаю, собеседование, то-се. Но есть еще один аспект. Потенциальный работодатель мог этим вопросом пытаться выяснить, не склонен ли ты бросаться решать задачу, не разобравшись толком, о чем она. Незнание чего-либо конкретного не так страшно, как каша в голове... Встречала я таких программистов... лучше сразу убить, чем пустить в проект... -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |