0

クラスフィールドがあります

char chars[4]

コンストラクターでこのフィールドを初期化したい。
コンストラクターはパラメーターとして取得する必要がありchar chars[]、コンストラクター呼び出しでクラス フィールドを初期化したい。
私はそれを行うことができますか、それともコピーを呼び出す必要がありますか?

4

5 に答える 5

5

std::copy次のように使用します。

class MyClass
{
    char m_x[4];    
public:
    MyClass(const char (&x)[4])
    {
        std::copy(x, x + 4, m_x);
    }
};

ここでは、正確に 4 つの要素を渡すよう強制するために、型を明示的に指定する必要があります。

于 2012-08-08T14:41:41.540 に答える
3

コピーを呼び出す必要があります。

MyClass::MyClass(const char* param)
{
  std::copy(param, param + 4, chars);
}

param にコピーする文字が 4 つあるという保証がないため、これは少し危険なコードです。

于 2012-08-08T14:31:50.823 に答える
2

vector<char>別の方法として、イニシャライザ リストで初期化できるa を使用することもできます。

class A
{
public:
    A(char* a): a_(a, a + strlen(a)) {}
private:
    std::vector<char> a_;
};

http://ideone.com/x9p6Iでデモを参照してください。


これは、さまざまな型をサポートするテンプレートにすることができますが、配列内の要素の数をコンストラクターに提供する必要があります (のstrlen()配列には適用されないためint)。例えば:

template <class T>
class A
{
public:
    A(const T* a, const size_t count): a_(a, a + count) {}
private:
    std::vector<T> a_;
};

http://ideone.com/hhoaCでデモを参照してください。

于 2012-08-08T14:39:24.653 に答える
-1

私が理解したように、作成する必要がありますConversion constructors。次のようになります。 A::A(const char* string) {strncpy(chars, string, 4); }

于 2012-08-08T14:37:23.170 に答える
-2

はい。入力パラメーターから内容をコピーする必要があります。

于 2012-08-08T14:35:33.757 に答える