Я исхожу из фона Java. У меня есть следующая программа.
#include <string>
#include <iostream>
class First {
public:
First(int someVal): a(someVal) {
}
int a;
};
class Second {
public:
First first;
Second() { // The other option would be to add default value as ": first(0)"
first = First(123);
}
};
int main()
{
Second second;
std::cout << "hello" << second.first.a << std::endl;
}
В классе Second
я хотел, чтобы переменная first
оставалась неинициализированной, пока я специально не инициализирую ее в Second()'s constructor
. Есть ли способ сделать это? Или у меня просто осталось 2 варианта?:
- Предоставьте конструктор без параметров.
- Инициализируйте его с некоторым значением по умолчанию, а затем повторно назначьте требуемое значение.
Я не могу инициализировать first
в списке инициализаторов правильным значением, так как значение получается после какой-то операции. Таким образом, фактическое требуемое значение для first
доступно только в конструкторе Second()
.
first
будет инициализирован, как только вы создадите экземплярSecond
. Нет никакого способа обойти это. Все, что вы можете сделать, это изменить его значение на более позднем этапе. - person juanchopanza   schedule 11.07.2014Second() : first(0) { first = First(123); }
- person linuxeasy   schedule 11.07.2014first
в списке параметров. Используйте функцию. - person Mooing Duck   schedule 11.07.2014first
в конструктореSecond
, вы все равно его инициализируете? Установитеfirst
в качестве указателя и установите его вNULL
илиnullptr
для С++ 11 в вашем конструкторе. Затем на более позднем этапе используйтеnew First(arg)
для создания нового указателя на объект типа First. - person PurityLake   schedule 11.07.2014unique_ptr
илиshared_ptr
, в зависимости от того, что должны делать d-tor, присваивание и копирование. - person Phil Miller   schedule 11.07.2014