2013-10-13 8 views
2

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

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 ? 
} 

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

+0

Нет, вы не могли бы это написать. Вы могли бы написать 'foo (new_var1, new_var2, new_var3)' хотя. –

+0

@LuchianGrigore Я думаю, что делать это так, что это приведет к созданию нового локального объекта вместо того, что я хочу сделать. – Bambi

+0

Скомпилировали? 'Child_class (new_var1, new_var2, new_var3)' в списке инициализаторов даст вам ошибку. –

ответ

1

Вы можете написать функцию, чтобы сделать расчеты для вас и вернуть Child_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(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); 
} 
+0

Мне нужно сделать мои вычисления в конструкторе owner_class. Я использую переменную члена строки owner_class, и я разделил ее на 3 части. Используя эти 3 новая переменная Я должен инициализировать объект Child_class в конструкторе – Bambi

+0

@Bambi не можете выполнить эти вычисления в 'make_child_object'? – juanchopanza

+0

make_child_object будет ownerClass method или childClass? @juanchopanza – Bambi