Инициализация переменной-члена с параметрами в c ++ - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть класс Foo с ЕДИНСТВЕННЫМ конструктором Foo(int length). У меня также есть класс «Bar» с членом Foo myFoo = myFoo(100) как бы я его инициализировал? Я могу инициализировать его, только если у него нет параметра длины в конструкторе Foo.

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 08 ноября 2011

Этот вопрос задавался много раз.Для этого вы используете списки инициализации конструктора:

class Bar
{
    Bar() : myFoo( 100 ) {}

    Foo myFoo;
};

Эти списки инициализации позволяют вызывать конструкторы как для базовых классов, так и для членов, и предназначены для их инициализации.

3 голосов
/ 08 ноября 2011
Bar::Bar()
: myFoo(100) {

// constructor code

}
0 голосов
/ 08 ноября 2011

Я не уверен, правильно ли я вас понял, но обычно члены инициализируются в списках инициализатора конструктора:

class Bar
{
public:
  Bar(); 
private:
  Foo myFoo;
};

Bar::Bar()
// The following initializes Foo
  : Foo(100)
// constructor body
{
}

Обратите внимание, что если Bar имеет несколько конструкторов, вы должны инициализировать myFoo в каждом из них.

C ++ 11 добавил инициализацию непосредственно в объявлении члена, например:

class Bar
{
  Foo myFoo = Foo(100);
};

Однако ваш компилятор может еще не поддерживать это или поддерживать только специальными флагами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...