Страница 1 из 1

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

Добавлено: 30 авг 2005, 15:28
SeregaLBN
Есть некомпилябельный класс ('левый' в качестве примера):

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

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
};
Кто-то может предложить что-либо другое?

Добавлено: 30 авг 2005, 18:36
Eugie
Можно, задавай в конструкторе значения параметров по умолчанию:

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

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) {} 
};

Добавлено: 31 авг 2005, 11:16
Kolinus
Eugie, не совсем отработает - посмотри есть конструктор от одного чара а параметры по умолчанию не дадут это сделать (или такой затык только в VС6 ?)

Добавлено: 31 авг 2005, 12:19
Eugie
Почему? Передавай в конструктор одиночный символ:

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

CDemo x('Y');
...
PS Кстати, проверено как раз в VC6 ;)

Добавлено: 31 авг 2005, 12:59
Kolinus
Сорри - затупил :)
у меня затык просто такой был сейчас вспомнил - там два параметра одинакового типа было по этому естественно только первый параметр и инициализировался..
да .. и про старуху бывает ... :)