Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизВзгляд на С++ с другой стороны. Найти похожие ветки
← →
vuk © (2007-01-16 11:34) [40]to GRAND25 © (16.01.07 11:29) [37]:
>Я думаю, что можно и даже нужно!
И потом в потомках бороться с фиксированным набором параметров. И зачем?
← →
Ega23 © (2007-01-16 11:34) [41]А что, в цпп объект действительно создаётся в момент объявления?
Я имею ввиду, что конструктор ему принудительно вызывать не надо, как в Delphi?
Но это же неудобно: а если я не хочу его создавать? Если только присвоить указатель на другой реально существующий экземпляр?
← →
GRAND25 © (2007-01-16 11:35) [42]
> И потом в потомках бороться с фиксированным набором параметров.
> И зачем?
За все надо платить!
← →
Бурундук © (2007-01-16 11:35) [43]GRAND25 © (16.01.07 11:29) [37]
>Вообще, считается признаком хорошего тона делать деструктор
>ВСЕГДА виртуальным.
Это не правила хорошего тона. Это уголовный кодекс. :-)
>Почему же конструктор низя?
>Я думаю, что можно и даже нужно!
Потому что в конструкторе есть аргументы.
И они могут отличаться для базового класса и для потомка.
Так что ВСЕГДА не получится.
← →
clickmaker © (2007-01-16 11:36) [44]
> если я не хочу его создавать? Если только присвоить указатель
> на другой реально существующий экземпляр?
TSomeClass* p1 = new TSomeClass();
TSomeClass* p2 = p1;
← →
GRAND25 © (2007-01-16 11:36) [45]
> А что, в цпп объект действительно создаётся в момент объявления?
Да, конструктор вызывается автоматом.
← →
Игорь Шевченко © (2007-01-16 11:36) [46]
> Но это же неудобно: а если я не хочу его создавать? Если
> только присвоить указатель на другой реально существующий
> экземпляр?
а матчасть слабо почитать ? Это в Delphi нельзя объявить объект, не объявив указатель на него. В C++ можно и то и то, в первом случае вызовется конструктор, во втором не вызовется и все будет, как в Delphi.
Учиться, учиться и учиться
← →
vuk © (2007-01-16 11:38) [47]to GRAND25 © (16.01.07 11:35) [42]:
>За все надо платить!
За неправильные решения? Несомненно! :))
← →
GRAND25 © (2007-01-16 11:39) [48]Интересная дискуссия. Все жду, когда же к множественному наследованию перейдете :)))
← →
clickmaker © (2007-01-16 11:39) [49]
> [45] GRAND25 © (16.01.07 11:36)
>
> > А что, в цпп объект действительно создаётся в момент объявления?
> Да, конструктор вызывается автоматом
не вводи народ в заблуждение. Это только частный случай
TSomeClass c; // здесь да, автоматом
TSomeClass* c; // а это просто указатель, как и в дельфи var c: TSomeClass;
← →
Ega23 © (2007-01-16 11:39) [50]
> а матчасть слабо почитать ?
Всё знать невозможно. Будет надобность - обязательно почитаю.
> В C++ можно и то и то,
Т.е. есть разница между экземпляром объекта и указателем на него? Ну тогда всё понятно.
← →
Kerk © (2007-01-16 11:41) [51][48] GRAND25 © (16.01.07 11:39)
> Интересная дискуссия. Все жду, когда же к множественному
> наследованию перейдете :)))
Помнится, как-то на семинаре по дотнету мелкософтовый евангелист по поводу отсутствия множественного наследования в дотнете сказал что-то такое: "Приведите мне пример, когда оно действительно нужно и мы это обсудим!" :) Я чуть не заплакал, оглядываясь на сидящих вокруг матерых сишников :)
← →
GRAND25 © (2007-01-16 11:42) [52]
> vuk © (16.01.07 11:38) [47]
Понимаешь, когда идет речь о неизвестности конкретного класса объекта в момент его создания, то уже подразумевается, что создаваться он будет неким универсальным вызовом конструктора - ысцэсцынна, с заранее известным числом и типами параметров! Согласись, для слишком разных и никак не связанных между собой классов это бессмысленно и невозможно. А раз перед программистом стоит такая задача, то от виртуальности конструктора он уже никуда не денется. Судьба такой!
← →
GRAND25 © (2007-01-16 11:43) [53]
> clickmaker © (16.01.07 11:39) [49]
Я и не ввожу народ в заблуждение. Речь шла о создании ОБЪЕКТА в момент его объявления, а не указателя на объект.
← →
Ega23 © (2007-01-16 11:43) [54]
> "Приведите мне пример, когда оно действительно нужно и мы
> это обсудим!"
Золотые слова. Лёха говорил, что ему всего один раз понадобилось МН за всю его долгую практику в С++. И то, в тот момент он писал на Delphi. И МН даже не то чтобы потребовалось, а с ним выглядело бы проще. Может быть. :)
← →
GRAND25 © (2007-01-16 11:45) [55]
> Помнится, как-то на семинаре по дотнету мелкософтовый евангелист
> по поводу отсутствия множественного наследования в дотнете
> сказал что-то такое: "Приведите мне пример, когда оно действительно
> нужно и мы это обсудим!" :) Я чуть не заплакал, оглядываясь
> на сидящих вокруг матерых сишников :)
Да с этими матерыми сишниками так и надо!
← →
Игорь Шевченко © (2007-01-16 11:46) [56]
> Приведите мне пример, когда оно действительно нужно и мы
> это обсудим
Оно не нужно никогда. Но в ряде случаев очень удобно.
← →
vuk © (2007-01-16 11:47) [57]to GRAND25 © (16.01.07 11:42) [52]:
>А раз перед программистом стоит такая задача
Когда она стоИт, то да, нужно. А вот всегда - не стОит. Если память мне ни с кем не изменяет, кто-то (не будем показывать пальцем) в [37] писал о том, что конструктор можно и нужно всегда делать виртуальным. :))
← →
Ega23 © (2007-01-16 11:47) [58]
> Но в ряде случаев очень удобно.
Действительно, приведи реальный пример, когда это будет удобно.
Просто интересно.
← →
GRAND25 © (2007-01-16 11:49) [59]
> Если память мне ни с кем не изменяет, кто-то (не будем показывать
> пальцем) в [37] писал о том, что конструктор можно и нужно
> всегда делать виртуальным. :))
Ну оговорился... Я просто когда писал, был в контексте той самой задачи, когда это необходимо.
← →
Игорь Шевченко © (2007-01-16 11:52) [60]Ega23 © (16.01.07 11:47) [58]
Когда тебе надо реализовывать методы одного и того же интерфейса в группе классов для обеспечения единого представления этой группы.
← →
vuk © (2007-01-16 11:54) [61]По поводу C/C++. Вот вы мне лучше скажите, в этих языках модульность есть? А то мне все время кажется, что её там нет.
← →
Kerk © (2007-01-16 11:54) [62]> [61] vuk © (16.01.07 11:54)
Нету
← →
Ega23 © (2007-01-16 11:54) [63]
> Когда тебе надо реализовывать методы одного и того же интерфейса
> в группе классов для обеспечения единого представления этой
> группы.
>
А группа классов, конечно же, по наследованию в разных ветках сидит, да?
← →
vuk © (2007-01-16 11:57) [64]to Kerk © (16.01.07 11:54) [62]:
Вот я тоже так почему-то думаю... Раздельная компиляция есть. А вот модульности - фиг.
← →
GRAND25 © (2007-01-16 11:57) [65]
> По поводу C/C++. Вот вы мне лучше скажите, в этих языках
> модульность есть? А то мне все время кажется, что её там
> нет.
Она там и рядом не валялась!
← →
clickmaker © (2007-01-16 12:00) [66]
> Раздельная компиляция есть. А вот модульности - фиг.
не уверен, что это такой уж недостаток
меня, например, несколько напрягают все эти initialization/finalization. Ощущение, что часть логики уползает из-под твоего контроля
← →
vlad-mal © (2007-01-16 12:00) [67]Интересно, а как люди относятся к тому, что переменные можно объявлять непосредственно перед использованием?
int main()
{
int i,j;
...
if (i == b) {
my_class ddt; // переменная ddt типа my_class
ddt.some();
}
else {
your_class ttd; // переменная ttd типа your_class
ttd.more();
}
;
}
Мне представляется это очень удобным. :)
← →
vlad-mal © (2007-01-16 12:03) [68]А что модульность?
Это хорошо или плохо?
← →
Kerk © (2007-01-16 12:04) [69]Просто в паскале единица инкапсуляции - это модуль, а в С++ - класс.
← →
Ega23 © (2007-01-16 12:04) [70]
> Мне представляется это очень удобным. :)
Это лишь вопрос синтаксиса и привычки.
Кстати, я уже давно не видел процедуры-функции, занимающей более 50 строк.
← →
Думкин © (2007-01-16 12:05) [71]> Ega23 © (16.01.07 12:04) [70]
Показать?
← →
clickmaker © (2007-01-16 12:07) [72]
> [67] vlad-mal © (16.01.07 12:00)
> Интересно, а как люди относятся к тому, что переменные можно
> объявлять непосредственно перед использованием?
ну, как вариант структурирование кода - неплохо. Т.е. код оформляется в некие законченные конструкции, где все под рукой.
Но я обычно использую такое только при уникальности локальных переменных. А если у меня счетчик цикла в нескольких местах, то мне кажется правильней его один раз наверху объявить, а не в каждом for i
← →
vlad-mal © (2007-01-16 12:07) [73]
> Думкин © (16.01.07 12:05) [71]
> > Ega23 © (16.01.07 12:04) [70] Показать?
Не надо :)
← →
GRAND25 © (2007-01-16 12:07) [74]
> Интересно, а как люди относятся к тому, что переменные можно
> объявлять непосредственно перед использованием?
Уродство. Огромный минус читабельности и прозрачности листинга.
← →
Ega23 © (2007-01-16 12:10) [75]
> Показать?
Не надо, я и сам могу показать. У меня и больше бывает. Просто ну очень редко, как правило - около 15-25 строк
← →
vuk © (2007-01-16 12:12) [76]to clickmaker © (16.01.07 12:00) [66]:
>не уверен, что это такой уж недостаток
Зачем тогда в C/C++ приходится модульность имитировать?
>Ощущение, что часть логики уползает из-под твоего контроля
Если есть такое ощущение, можно просто эти вещи не использовать.
to Kerk © (16.01.07 12:04) [69]:
>Просто в паскале единица инкапсуляции - это модуль, а в С++ - класс.
Вообще-то не класс, а пространство имен. Но модульности это не добавляет.
← →
vlad-mal © (2007-01-16 12:13) [77]
> GRAND25 © (16.01.07 12:07) [74]
> Уродство.
> Огромный минус читабельности и прозрачности листинга.
Так и знал, что кто-то скажет. :)
Тем не менее, мне понравилось. К примеру, нет нужды переменную цикла где-то далеко описывать. Оно конечно, "текст метода должен помещаться на одном экране", но всякое бывает. :)
И в то же время ничто не мешает объявлять все в стиле Delphi - в самом начале, "где-то там, вверху".
С другой стороны - ничто не мешает все сделать наоборот. Все равно тем, кто читает такой код, может не понравится.
← →
Думкин © (2007-01-16 12:13) [78]> Ega23 © (16.01.07 12:10) [75]
http://www.axforum.info/forums/showthread.php?t=7095&highlight=%D1%81%D0%B0%D0%BC%D1%8B%D0%B9+%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4
оттуда:А вот такой документации в Аксапте чертовски мало. Именно из-за того, что разрабочики свято верили в рефакторинг.
! А еще один из постулатов рефакторинга гласит следующее:
Цитата:
Extract Method
You have a code fragment that can be grouped together.
Turn the fragment into a method whose name explains the purpose of the method
Теперь берем метод \Classes\CustVendSettle\SettleNow, оставляем слой SYS и смотрим:
1. В начале метода огромный комментарий (см. первый постулат )
2. Код метода состоит из 620-и строк (см. второй постулат)
P.S. Сергей, только не говори, что исключение подтверждает правило. Аксапта с рефакторингом явно не дружатКак раз скажу. Как раз исключение и как раз подтверждает.
Для того, чтобы это понять необходомо посмотреть историю этого метода.
Начиная с версии 2.1
В том то и дело, что со временем команда сменилась.
И теперь мало кто вообще понимает что и почему там делается...
Поэтому документация очень и очень нужна.
← →
clickmaker © (2007-01-16 12:15) [79]
> [76] vuk © (16.01.07 12:12)
> to clickmaker © (16.01.07 12:00) [66]:
> >не уверен, что это такой уж недостаток
>
> >Ощущение, что часть логики уползает из-под твоего контроля
> Если есть такое ощущение, можно просто эти вещи не использовать
а я и не использую. vcl использует
> Зачем тогда в C/C++ приходится модульность имитировать?
каким образом?
← →
vlad-mal © (2007-01-16 12:15) [80]
> Вообще-то не класс, а пространство имен. Но модульности
> это не добавляет.
А что нужно-то, от модульности такого особенного, что там есть?
Доступ к закрытым членам другого класса в переделах модуля? :)
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.62 MB
Время: 0.05 c