Вызов конструктора после определения объекта

class first{
int fa,fb;

public:
first();
first(int x,int y);
void display();
};

first::first():fa(0),fb(0){
}

first::first(int x,int y):fa(x),fb(y){
}

void first::display(){
cout<<fa<<" "<<fb;
}

class second{
first f;
int sa,sb;

public:
second();
second(int x,int y,int a,int b);
void display();
};

second::second():sa(0),sb(0){
}

second::second(int x,int y,int a,int b):f(x,y),sa(a),sb(b){
}

void second::display(){
cout<<"The Numbers are ";
f.display();
cout<<" "<<sa<<" "<<sb<<endl;
}

Я прошу прощения, если этот вопрос уже задавался.

Это простой код для демонстрации работы вложенных классов в c ++.
Тем не менее, в классе second, предмет f несмотря на то, что он был определен ранее, я могу вызвать конструктор, используя конструктор second учебный класс.
Как можно вызвать конструктор для уже определенного экземпляра класса?

0

Решение

Предмет first f; является членом second, Это означает, что каждый second содержит first, Так что в процессе создания second, first должен быть создан. Ваш мем-инициализатор f(x,y) указывает, как именно создать f при создании second объект.

0

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

Вы смешиваете разные понятия, когда переменная определена в функции:

void foo()
{
Foobar f; // f is defined and default initialized  here
Foobar d { 123 }; // d is defined and initialized with 123
}

и объявлен как поле в class или же struct:

struct boo {
Foobar f; // f is declared as member of type boo and how it will be
// initialized will be known in boo's constructor
// not here

boo() {} // f is default constructed
boo( int i ) : f { i } {} // f is initialized with i
};

что еще хуже для вас в c ++ 11 вы можете передать параметры конструктору поля вместо:

struct boo {
Foobar d { 123 };  // d would be initialized with 123 if otherwise is not set in boo's constructor

boo( int i ) : d { i } {} // 123 is ignored and d is initialized with i
boo() {} // d { 123 } is used
};

тем не менее, даже если вы передаете параметры в поле, как поле инициализируется, определяется в конструкторе boo.

0

По вопросам рекламы [email protected]