![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#12 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
К моменту запуска списка инициализации конструктора, вся необходимая память уже выделена (this объекта реально существует). |
|
![]() |
![]() |
![]() |
#13 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
![]() Цитата:
Спасибо за указание на ошибку ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Пользователь
Регистрация: 31.08.2013
Сообщений: 93
|
![]()
Вот ещё обратил внимание:
Цитата:
А по поводу "тратить время", не знаю пригодится ли Вам или нет, но не в качестве совета, а скорее просто поделюсь информацией к размышлению... Вы можете существенно сэкономить время, а так же количество строк кода используя всевозможные средства програмирования. В данном случае, что бы обеспечить доступ к свойствам класса методами Set и Get нужно описать эти публичные методы в классе вручную, что то вроде: Код:
Приведу пример кода Вашего класса, где все свойства приватны и к каждому из них уже есть методы Get и Set. Код:
При том макрос GET_SET_ACCESSOR установит оба метода и Get и Set, но можно назначать каждому свойству ограниченный доступ, например только чтение GET_ACCESSOR(bool, Smoking), только запись SET_ACCESSOR(bool, Smoking)... Последний раз редактировалось Vladiger; 03.09.2013 в 23:18. |
|
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
![]()
А зачем так извращаться? ведь можно просто объявить и определить методы для работы с данными объекта. Зачем здесь макросы? Затрата времени на процесс компиляции, отрабатает препроцессор -Ю заменит макросы их определениями... зачем? А метод inline и так объявить можно, без макросов.
|
![]() |
![]() |
![]() |
#16 | |
Пользователь
Регистрация: 31.08.2013
Сообщений: 93
|
![]()
Ключевым моментом является:
Цитата:
Ну лень человеку писать на каждую переменную: Код:
Тут нет выгоды в функционале, тут выгода в элементарном сокращении кода, т.е. чисто человеческий фактор. Можно конечно и руками все это описать, без макросов, но вот по секрету скажу, мне тоже лень, я постоянно такими штуками пользуюсь! ![]() А время на компиляцию не думаю что изменится. Компилятору не все ли равно что компилировать, объявленные методы Get и Set вручную, либо объявить их макросом... Все то же самое. Я ведь не говорю о том что эти методы нужно объявлять на каждую переменную, только на те к которым нужен доступ. |
|
![]() |
![]() |
![]() |
#17 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#18 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2Vladiger
отвратительно. ты понимаешь, что люди это придумавшие (COM, DX, MFC) писали в те времена на "C с классами"? сейчас такой код только вводит в заблуждение. эти люди (а соответственно и ты, ибо скопипастил) даже геттер константным не сделали. захочешь в один из геттеров/сеттеров добавить отладочный вывод/контроль данных, и он уже будет выбиваться из общей массы. добавлять таким образом "новые конструкции" в язык - практически всегда плохо. лень много писать? освой уже свой инструмент (ide/редактор), и напиши сниппет.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#19 | |
Пользователь
Регистрация: 31.08.2013
Сообщений: 93
|
![]() Цитата:
![]() Я даже более скажу, скажу откуда скопипастил: DirectX Software Development Kit в состав SDK входит графический интерфейс DXUT, открытость кода и никаких запретов на макросы я не нашел. А что отвратительно то? То что пишу программы на языке высокого уровня используя пускай не все, но все известные мне средства? Ну хорошо, я учту. Переходим на Dos и Ассемблер, надеюсь он никого не введет в заблуждение. |
|
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Vladiger,
1. Без видимой причины не нужно делать данные приватными. 2. Код один раз пишется, а потом много-много раз читается. Макросы ухудшают читабельность и усложняют код на ровном месте. Простой геттер/сеттер легко читается. 3. Методы, определенные в декларации класса по стандарту уже являются inline. Не нужно дополнительно указывать это компилятору. К тому же, современные компиляторы стали достаточно умны. Умеют инлайнтить даже те методы, которые разбросаны по разным единицам трансляции. Если компилятор технически в состоянии заинлайнтить функцию, и посчитает, что подстановка приведет к увеличению производительности - он её заинлайнтит, достаточно указать в опциях компиляции, что бы оптимизировал по скорости. Поэтому, сегодня ключевое слово inline уже не актуально и присутствует лишь для совместимости со старым кодом. Актуальность сохраняют ключевые слова, например: __forceinline Это расширение от компилятора майкрософт. Приказ компилятору инлайнтить функцию "крутись как хочешь, но сделай". Неаккуратное использование может просадить производительность. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обновление поля формы после создания новой записи создания | romanln2012 | Microsoft Office Access | 2 | 09.08.2012 14:12 |
Подскажыте програму для создания gif-анимаций, которые после создания не теряют четкости | pufystyj | Софт | 1 | 24.02.2011 01:50 |
Автоматическое преобразование на основе первого аргумента конструктора в вызов самого конструктора | jennya | Visual C++ | 8 | 03.10.2010 19:03 |
Создание конструктора | Superlotles | Общие вопросы C/C++ | 5 | 23.05.2010 01:38 |
Правила разделов/главные правила | Alex Cones | О форуме и сайтах клуба | 1 | 30.09.2009 17:49 |