Russian Qt Forum
Ноябрь 23, 2024, 20:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Параметри конструктора или вызовы ф-ций  (Прочитано 3369 раз)
blood_shadow
Гость
« : Апрель 07, 2011, 10:47 »

Вообщем в объекте надо определить 8 полей, как лучше это сделать, инициализацией с помощью
конструктора с 8 параметрами или создание пустого объекта и вызов 8 ф-ций?
интересуют вопросы соотношения производительности и хорошего/плохого стиля
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 07, 2011, 10:51 »

Оба варианта не очень. Данные можно определить в структуру?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 07, 2011, 11:03 »

Вообщем в объекте надо определить 8 полей, как лучше это сделать, инициализацией с помощью
конструктора с 8 параметрами или создание пустого объекта и вызов 8 ф-ций?
интересуют вопросы соотношения производительности и хорошего/плохого стиля
Если поля "однородны", можно использовать указатель, напр

Код
C++ (Qt)
struct Matrix3x3 {
Matrix3x3( const float * src = 0 )
{
   if (!src) Identity();
   else Set(src);
 }
 
void Set( const float * src )
{
  m00 = src[0];
  ...
  m22 = src[8];
}
};
 
Если же полей много, но они не имеют между собой ничего общего, то лучше создать вспомогательную struct  (со всеми полями открытыми), спокойно ее заполнить и подать как 1 параметр конструктора

Код
C++ (Qt)
struct MyConstructInfo {
float mMagnify;
int mType;
...
};
 
// использование
MyConstructInfo info;
info.mMagnify = 1.0f;
...
 
MyClass * theObject = new MyClass(&info);
 
Записан
Fess
Гость
« Ответ #3 : Апрель 07, 2011, 11:08 »

в зависимости от задачи..
* можно сделать конструктор по умолчанию (без параметров) - обнуляет поля.
* конструктор с нужными полями
* get()/set() для каждого поля.
Объединять в структуру только если они имеют общую смысловую нагрузку
Записан
blood_shadow
Гость
« Ответ #4 : Апрель 07, 2011, 11:09 »

понял, спасибо всем, вариант со структурой подошел, будем знать Улыбающийся
Записан
Akon
Гость
« Ответ #5 : Апрель 07, 2011, 13:33 »

ИМХО, вариант со структурой/классом нужно использовать если все поля связаны, т.е. считываются и устанавливаются как единое целое. Если поля не связанные, то конструктор устанавливает значения по-умолчанию, а дальше getter/setter по каждому полю.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.149 секунд. Запросов: 22.