Как я могу использовать список инициализации, чтобы выбрать, какой конструктор использовать? - PullRequest
0 голосов
/ 08 августа 2010

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

class First
   {private: 
         int a, b, c;
  public:
First(int x);
First(int x, int y);
}

First::First(int x, int y, int z = 0)
{ /* this is a constructor that will take two or three int arguements. */ }

First::First(int x, int y = 0, int z = 0)
{ /* and this will be called if one arguement is given */ }

Я думал, что следует избегать всех назначений, так как бы мне написать списки инициализаторов для этих двух конструкторов?

Ответы [ 4 ]

3 голосов
/ 08 августа 2010

Я не совсем уверен, что следую.В настоящее время, предоставляя аргумент x и y (и, следовательно, z), оба конструктора будут доступны для вызова, что приведет к неоднозначности.

Я думаюто, что вы ищете:

class First
{
public:
  First(int x);
  First(int x, int y, int z = 0);
};    

// invoked as First f(1);
First::First(int x) :
a(x), b(0), c(0)
{}

// invoked as First f(1, 2); or First f(1, 2, 3);
First::First(int x, int y, int z) :
a(x), b(y), c(z)
{}
1 голос
/ 09 августа 2010

Я думаю, вы имеете в виду это:

class First
{
private: 
    int a, b, c;
public:
    First(int x);
    First(int x, int y);
}

class Second
{
private:
Second(int x) : First(x) { }
Second(int x, int y) : First(x, y) { }
}    

Может быть?

1 голос
/ 08 августа 2010

Это не так, как все работает.Если вы хотите использовать аргументы по умолчанию, используйте только один constructof, объявите его с аргументами по умолчанию и определите его (не переопределяя их).

class First
{
  private: 
         int a, b, c;
  public:
First(int x, int y = 0, int z = 0);
};

First::First(int x, int y, int z)
{   /*...*/ }

Учитывая ваш вопрос, я не уверен, что вы знаете, что такое инициализациясписок ...

1 голос
/ 08 августа 2010

Список инициализации Ctor не предназначен для выбора вершины ctor.

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