|
[Mon]
Сообщений: 10,259
Проживание: virtual
Регистрация: 06-02-2004
Status: Offline
Репутация: 42
|
Цитата:
|
Сообщение от Alvarez
Здравствуйте.
Конструктор по умолчанию у Вас странный. Уж если он Вам так необходим - присваивайте значения в списке инициализации - это гораздо эффективнее. Та же беда с конструктором и другим...
Итак, на мой взгляд конструктор должен быть один, принимающий значения породы и года. Кличку хозяин даст позже. Конструктор же по умолчанию, если и нужен, то должен быть привате, что означает его использование лишь инициализаторами С++, а не клиентами класса.
|
Ну, Ц++ у менаы на очень среднем уровне, т.к. я не часто его использую. Любая критика из велкам - больше буду знать. Один конструктор означает, что цлиент цласса не может создать обьект не передавая никаких параметров. ИМХО, может быть очень надоедливой фичей, если учесть, что там будет оператор "=".
Цитата:
4. По правилам хорошего тона все гет методы должны возвращать только константы. Хотя, в Вашем случае это не ссылки и не указатели - и так покатит (но подумайте о стиле, всё же)
|
Ну, вроде один простой (цаст) делает из цонста нецонст  .
Цитата:
5. Породу я бы сделал указателем на класс породы, а не её именем, потому как порода - это набор свойств, которые удачно инкапсулируются соответствующим классом, а не только название. Представьте что кому то захотелось узнать поподробнее про собачонку. Узнал породу, и что , лезем в интернет за инфой? А у нас бы тут уже и ссылочка имелась на всю инфу, все линки... - и не надо усложнять жизнь поиском, и памяти меньше потратим.
|
ну, там в задаче, вроде, стринга была  . А так, человеку еше один класс надо было бы писать.
Цитата:
6. Деструктор всегда должен быть витруальным - опять таки по правилам хорошего тона - Вы породите подкласс Цирковой собаки, поведёте её на выставку Собак, и не сможете затем с этой Выставки уничтожить её Цирковые достоинства....
|
Ну, елси мы породим другой калсс, то он будет иметь собственный деструктор который будет уничтожать цирковые качества и передавать управление деструктору супер-класса. Или я чего-то не понял?
Цитата:
7. Вы действительно считаете, что Собака должна уметь резать строки? Мне кажется, Собака создавалась чтобы бегать, прыгать, размножаться, ногу поднимать... Резать строки должен РезательСтрок - совсем другой объект, класс если хотите, причём сейчас он это делает так, а завтра будет делать ещё эффективнее - и Собака ничего про это не должна знать. Резать он будет их не только Собаке, а ещё и Кошкам, Белкам, и Зайчикам. Выход - убрать нафик цутСтринг из Собаки, а все значения на входе передавать инварианту - методу, который проверяет (валидате) состояние объекта Собака, или параметов для Собаки, и если надо, то и правит их по своим правилам => может и подрезать строки, пользуясь переданной ему ссылкой на РезателяСтрок... Этот злобный валидатор Собак может быть совершенно другим классом, например другом (фриенд) Собак... Не скрещивайте Собак с бездушным РезателемСтрок
|
Ну, здесь соглашусь, что резатель строк может быть другим классом. Хотя, валидаор на все свойства собаки не есть еффективно. Если, например, вы хотите изменить только имя, то зачем валидатору проверять вся остальное?
В данном случае, резатель строк просто обшая функциональность, которая должна присутствовать в двух сет методах. Может, по стилю, оно и не правильно, но количества кода для данной простой операции гораздо меньчше. ИМХО, сложность десигна должна соответствовать задаче. Если мы знаем, что дальше "Собака" дело не пойдет, то можно слегка прогнуть ООП правила. Плюс, человек не может разглядеть резатель даже в моем коде, а, представьте, френдов и виртуальные функции

-----------------
-=*=-
|