Главная страница
    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.62 MB
Время: 0.05 c
8-1150388501
***(H@kker)***
2006-06-15 20:21
2007.02.11
Экспорт модели


2-1169495030
Garacio
2007-01-22 22:43
2007.02.11
Invalid pointer operation


15-1169128448
oldman
2007-01-18 16:54
2007.02.11
Трабл с Office-97


6-1157383265
Griha
2006-09-04 19:21
2007.02.11
Перенаправление пакетов (аля proxy)


9-1143630278
BLack Fury
2006-03-29 15:04
2007.02.11
Как растянуть картинку на нужную площадь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский