инициализация объекта в другом объекте класса. (после выполнения некоторых операций над этим конструктором.)

Я хочу инициализировать член класса, который также является другим объектом класса. Проблема в том, что я должен инициализировать член переменными, которые я выясняю после выполнения некоторых операций над моим конструктором. Позвольте мне показать пример кода.

class Child_class
{
private:
int var1, var2, var3;

public:
DateTime(int var1 = 1970, int var2 = 1, int var3 = 1);

};

Второй класс:

class Owner_class
{
private:

Child_class foo;

public:
// I have to make some string split operations on string_var variable
// and get some new variables.After that, I need to initialize child_class with  new variables
Owner_class( string string_var, int test);
}

Один из способов сделать это, я знаю, я мог бы написать:

Owner_class::Owner_class():
Child_class(new_var1,new_var2,new_var3) {
// but since I'll find new_var1,new_var2 and new_var3 here.I couldnt use this method.
// Am I right ?
}

Есть ли кто-нибудь, чтобы помочь мне?
заранее спасибо!

2

Решение

Вы можете написать функцию, которая сделает за вас вычисления и вернет Child_class объект и использовать его для инициализации вашего экземпляра в Owner_class список инициализации конструктора:

Child_class make_child_object(string string_var, int test)
{
// do stuff, instantiate Child_class object, return it
}

затем

Owner_class(string s, int n) : foo(make_child_object(s, n) {}

Если этот метод не подходит, то альтернативой является дать Child_class конструктор по умолчанию, и присвоить ему значение в Owner_class тело конструктора:

Owner_class(string s, int n)
{
// foo has been default constructed by the time you gethere.
// Do your stuff to calculate arguments of Child_class constructor.
....
// construct a Child_class instance and assign it to foo
foo = Child_class(a, b, c);
}
1

Другие решения

Других решений пока нет …