0

これはばかげた質問かもしれません。ウェブ上で答えが見つからないので、答えがノーだからだと思います。

私はクラスを持っています:

class A{
    public:
        A();
    private:
        std::string a("a");
};

クラスコンストラクタを呼び出さずに、引数を「a」に設定したいと思います。その理由は、私の実際のクラスには、常に同じ(定数)値を持つ多くの異なるコンストラクターと多くの引数があるためです。そして、ある日、「a」を「b」に置き換えることにした場合、すべてのコンストラクターを変更したくありません。また、自分のクラスにしか存在しないようにしたいと思います。

4

2 に答える 2

3

C++11 では、宣言の時点で非静的メンバー変数を初期化するオプションがあります。

class A{
 public:
  A();
private:
  std::string a = "a"; // curly braces allowed too: std::string a{"a"};
};

C++11 では委任コンストラクターも追加されているため、他のコンストラクターからクラスのコンストラクターを呼び出すことができます。これによりa、1 か所だけで初期化できます。

#include <iostream>
#include <string>

struct Foo
{
  Foo() : a("Hello, Foo!") {}
  Foo(int) : Foo() {}
  Foo(int, int) : Foo() {}
  std::string a;
};

int main()
{
  Foo f1(42);
  Foo f2 (1,2);
  std::cout << f1.a << "\n";
  std::cout << f2.a << "\n";
}

それ以外の場合は、他の回答で提案されているように、コンストラクターの初期化リストを使用します。

class A{
 public:
  A() : a("a") {}
 private:
  std::string a;
};
于 2013-02-27T08:45:38.180 に答える
0

クラスコンストラクタ初期化子リストで初期化します。

A::A()
    : a("a")
{
}
于 2013-02-27T08:43:41.783 に答える