Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Имея два конструктора одного класса, заставить


Автор: Royan 6.3.2006, 07:22
Ситуация такая имеем два конструктора одного класса.

Код

    CClass()
        : param1 (0.5),
          param2 (100000),
          param3 (NULL),
          szPath (NULL)
        {
        
        }
    CClass(char *path)
        : szPath(path)
        {
            
        }


Возможно ли без вынесения инициализации параметров в какую-нибудь приватную функцию, (т.е. оставив все как есть) заставить сначала отработать конструктор CClass(), а уж только потом CClass(char *path)

Автор: np9mi7 6.3.2006, 07:50
Цитата
Возможно ли без вынесения инициализации параметров в какую-нибудь приватную функцию, (т.е. оставив все как есть) заставить сначала отработать конструктор CClass(), а уж только потом CClass(char *path)
, то есть два раза сконструировать объект?

Только так:
Код

    CClass()
        : param1 (0.5),
          param2 (100000),
          param3 (NULL),
          szPath (NULL)
        {
        
        }
    CClass(char *path)
        : param1 (0.5),
          param2 (100000),
          param3 (NULL),
          szPath(path)
        {
            
        }

Автор: Royan 6.3.2006, 08:12
Нет ничего конструировать два раза не надо физически этого происходить и не будет. Нужно чтобы отработал список инициализации у конструктора по-умолчанию.

Автор: MAKCim 6.3.2006, 08:34
для одного объекта нельзя
можно так
Код

...
    CClass()
        : param1(0.5), param2(100000),
            param3(NULL), szPath(NULL) {}
    CClass(char* path)
    {
        CClass temp;
         *this=temp;
         szPath=path;
    }

но это имхо неправильно, зато можешь менять сколько угодноо первый конструктор, можешь даже вместо него написать другой при минимуме затрат на преобразование существующего кода
тут используется оператор =, поэтому если работаешь с указателями, надо явного его самому писать + такой конструктор по определению медленный
вообще лучше всего если их у тебя 2 сделать как писал np9mi7

Автор: Lotrex 6.3.2006, 08:35
Можно и так smile :
Код

    CClass()
        : param1 (0.5),
          param2 (100000),
          param3 (NULL),
          szPath (NULL)
        {
        
        }
    CClass(char *path)
        {
            *this = CClass();
        }

Автор: Daevaorn 6.3.2006, 08:42
Как вариант:
Код

CClass(char *path = 0)
        : param1 (0.5),
          param2 (100000),
          param3 (NULL),
          szPath (path )
        {
        
        }

Автор: Royan 6.3.2006, 11:19
Ясно спасибо всем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)