В приведенном ниже коде класс B имеет член, который имеет тип класса A (varA1). Я хочу, чтобы создать объект класса B, где элемент varA1 предназначен для использования конструктора не по умолчанию (интермедиат v1) в классе А.C++ Default Constructor Called
#include <iostream>
using std::cout; using std::endl; using std::string;
class A {
public:
A() { cout << "A default constructor" << endl;}
A(int v1);
private:
int var1;
};
A::A(int v1) {
cout << "A int constructor" << endl;
var1 = v1;
}
class B {
public:
B() { cout << "B default constructor" << endl;}
B(int v1);
private:
int var1;
A varA1;
};
B::B(int v1) {
cout << "B int constructor" << endl;
var1 = v1;
A varA1(int v1);
}
int main()
{
A TestA(1);
B TestB(1);
return 0;
}
Однако, когда я запускаю код, приведенный выше, я получаю следующий результат:
A int constructor
A default constructor
B int constructor
Должно быть, я ошибаюсь. Что мне нужно изменить, чтобы класс B использовал конструктор A (int v1) не по умолчанию в классе A?
Я использую ubuntu 14.04LTS. Аналогичные результаты получили как GNU G ++ 4.9, так и 5.1.
Заранее благодарим за чтение и ответ.
Это работает. Является ли список инициализации членов единственным способом для этого? Спасибо за дополнительную информацию! – user3569894
@ user3569894: В значительной степени. C++ 11 добавил более удобную [инициализацию члена] (http://stackoverflow.com/questions/13662441/c11-allows-in-class-initialization-of-non-static-and-non-const-members-what- c), а также добавлена [агрегатная инициализация] (http://en.cppreference.com/w/cpp/language/aggregate_initialization). Эти новые функции полезны, но они не позволяют избежать использования списка инициализации членов в этой ситуации. – Cornstalks
Еще раз благодарю вас за быстрый ответ и благодарность Джеймсону. – user3569894