|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.09.2013, 22:04 | #11 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Цитата:
|
|
03.09.2013, 22:08 | #12 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
К моменту запуска списка инициализации конструктора, вся необходимая память уже выделена (this объекта реально существует). |
|
03.09.2013, 22:53 | #13 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Цитата:
Спасибо за указание на ошибку |
|
03.09.2013, 23:16 | #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. |
|
03.09.2013, 23:29 | #15 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
А зачем так извращаться? ведь можно просто объявить и определить методы для работы с данными объекта. Зачем здесь макросы? Затрата времени на процесс компиляции, отрабатает препроцессор -Ю заменит макросы их определениями... зачем? А метод inline и так объявить можно, без макросов.
|
03.09.2013, 23:47 | #16 | |
Пользователь
Регистрация: 31.08.2013
Сообщений: 93
|
Ключевым моментом является:
Цитата:
Ну лень человеку писать на каждую переменную: Код:
Тут нет выгоды в функционале, тут выгода в элементарном сокращении кода, т.е. чисто человеческий фактор. Можно конечно и руками все это описать, без макросов, но вот по секрету скажу, мне тоже лень, я постоянно такими штуками пользуюсь! А время на компиляцию не думаю что изменится. Компилятору не все ли равно что компилировать, объявленные методы Get и Set вручную, либо объявить их макросом... Все то же самое. Я ведь не говорю о том что эти методы нужно объявлять на каждую переменную, только на те к которым нужен доступ. |
|
03.09.2013, 23:51 | #17 | |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Цитата:
|
|
04.09.2013, 00:15 | #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 |
04.09.2013, 00:30 | #19 | |
Пользователь
Регистрация: 31.08.2013
Сообщений: 93
|
Цитата:
Я даже более скажу, скажу откуда скопипастил: DirectX Software Development Kit в состав SDK входит графический интерфейс DXUT, открытость кода и никаких запретов на макросы я не нашел. А что отвратительно то? То что пишу программы на языке высокого уровня используя пускай не все, но все известные мне средства? Ну хорошо, я учту. Переходим на Dos и Ассемблер, надеюсь он никого не введет в заблуждение. |
|
04.09.2013, 00:33 | #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 |