Конструкторы

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
SeregaLBN
Сообщения: 23
Зарегистрирован: 17 фев 2004, 13:27
Откуда: Киев
Контактная информация:

Есть некомпилябельный класс ('левый' в качестве примера):

Код: Выделить всё

class CDemo{
   char m_c;
   int  m_i1;
   int  m_i2;
   int &m_li;
public:
   CDemo(int val, char c) : m_i1(val>0 ? 0   :val ),
                            m_i2(val>0 ? val :0   ),
                            m_li(val>0 ? m_i1:m_i2),
                            m_c(c) {}
   CDemo(int val) : CDemo(val, '\0') {}
   CDemo(char c)  : CDemo(0  ,   c ) {}
   CDemo()        : CDemo(0  , '\0') {}
};
Можно как-то его попроще переписать так чтобы он работал?
Мне надо много конструкторов, но просто лень каждый раз писать одну и туже инициализацию членов класса...

Единственное что мне понравилось, так это (компилябельный класс):

Код: Выделить всё

class CDemo{
   char m_c;
   int  m_i1;
   int  m_i2;
   int &m_li;
public:
#define Constructor(val, c)      \
       : m_i1(val>0 ? 0   :val ),\
         m_i2(val>0 ? val :0   ),\
         m_li(val>0 ? m_i1:m_i2),\
         m_c(c) {}
   CDemo(int val, char c) Constructor(val,   c )
   CDemo(int val)         Constructor(val, '\0')
   CDemo(char c)          Constructor(0  ,   c )
   CDemo()                Constructor(0  , '\0')
#undef Constructor
};
Кто-то может предложить что-либо другое?
Серёга, любит баранью ногу.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Можно, задавай в конструкторе значения параметров по умолчанию:

Код: Выделить всё

class CDemo{ 
   char m_c; 
   int  m_i1; 
   int  m_i2; 
   int &m_li; 
public: 
   CDemo(int val = 0, char c = '\0') : m_i1(val>0 ? 0   :val ), 
                            m_i2(val>0 ? val :0   ), 
                            m_li(val>0 ? m_i1:m_i2), 
                            m_c(c) {} 
};
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

Eugie, не совсем отработает - посмотри есть конструктор от одного чара а параметры по умолчанию не дадут это сделать (или такой затык только в VС6 ?)
В SAD - все в SAD.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Почему? Передавай в конструктор одиночный символ:

Код: Выделить всё

CDemo x('Y');
...
PS Кстати, проверено как раз в VC6 ;)
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

Сорри - затупил :)
у меня затык просто такой был сейчас вспомнил - там два параметра одинакового типа было по этому естественно только первый параметр и инициализировался..
да .. и про старуху бывает ... :)
В SAD - все в SAD.
Ответить