Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.64 MB
Время: 0.037 c
6-1156746436
vodvorezlaya
2006-08-28 10:27
2007.02.11
Создание собственного Proxy сервера


2-1168556318
Wind
2007-01-12 01:58
2007.02.11
Создание *.xls отчета.


15-1169554558
1234564
2007-01-23 15:15
2007.02.11
Посоветуйте обучалку по ХТМЛ


2-1169572080
Godness
2007-01-23 20:08
2007.02.11
Как создать форму в паралельном потоке?


8-1150349926
Vasiliy
2006-06-15 09:38
2007.02.11
Управление выходом видеокарты ???