1

私が間違っていることを理解できませんか?私はプライベートデータを持つクラスを持っています:

static const int SIZE = 101;
int *ptr;
int set [SIZE];

そして、私は2つのコンストラクターを持っています。1 つは、配列を 0 に設定する既定のコンストラクターです。もう 1 つは、5 つの引数を取り、配列内の 5 つの値を 1 に設定します。この配列を出力する必要があります。私がコンストラクターにいるとき、すべてが機能しています。コンストラクター内で cout << を実行すると、結果は正しくなります。しかし、関数印刷を使用しようとしているとき。結果はゴミ。私が間違っていることは何ですか?

IntegerSet::IntegerSet() //default constructor
{
    int set[SIZE] = {0};
    ptr = set;
    cout << "Default Constructor: " << endl;
    for (int i =0; i<SIZE ;i++)
    {
        cout << set[i] << " ";
    }
    cout << endl;
}


IntegerSet::IntegerSet(int a, int b, int c, int d, int e)
{
    int set[SIZE] = {0};
    ptr = set;

    ptr[a] = ptr[b] = ptr[c] = ptr[d] = ptr[e] = 1;

    cout << "Constructor with 5 parametrs: " << endl;
    for (int i =0; i<SIZE ;i++)
    {
        cout << ptr[i] << " ";
    }
    cout << endl;
}

void IntegerSet::print() const
{
    bool flag = false;
    cout << "I am in print: " << endl;

    for (int i=0;i<SIZE;i++)
    {
        if (ptr[i]==1)
        {
            cout << i << " ";
            flag = true;
        }
    }
    if (flag == false)
        cout << "-----";
    cout << endl;
}


void main()
{
    IntegerSet s1;
    IntegerSet s2(1,50,10,22,98);

    s2.print();
}
4

6 に答える 6

6

set各コンストラクターは、クラス メンバーをシャドウするという新しい配列を宣言します。

于 2013-10-23T19:24:54.680 に答える
0

arraysetはコンストラクタに対してローカルです。したがって、ptrを指すポインターはset、後で NULL を指します。これsetは、コントロールがコンストラクターの外に出たときに配列が存在しないためです。

setインスタンス変数である配列を使用してset、コンストラクターとメソッドの両方で同じインスタンスを持つようにしますprint

IntegerSet::IntegerSet()                                            //default constructor
{
    set[SIZE-1] = {0};
    ptr = set;
    cout << "Default Constructor: " << endl;
    for (int i =0; i<SIZE ;i++)
    {
        cout << set[i] << " ";
    }
    cout << endl;
}


IntegerSet::IntegerSet(int a, int b, int c, int d, int e)
{
    set[SIZE-1] = {0};
    ptr = set;

    ptr[a] = ptr[b] = ptr[c] = ptr[d] = ptr[e] = 1;

    cout << "Constructor with 5 parametrs: " << endl;
    for (int i =0; i<SIZE ;i++)
    {
        cout << ptr[i] << " ";
    }
    cout << endl;
}
于 2013-10-23T19:32:48.920 に答える