1

私は割り当てで、プライベート メンバーとして "int *p" を持つ動的な int 配列リストである IntList を実装するように依頼されました。すべてのメソッド (add、find、delete など) を実装した後、以下を返すパブリック メソッドを実装する方法がわかりませんでした。

  • 基になる配列への読み取り専用ポインターを取得します。

内容を変更できない *p 番号を持つポインターを返すにはどうすればよいですか?

4

3 に答える 3

4

次のようなコードを記述する必要があります。

class A {
    int *tab;

public:
    A() {
        tab = new int[3];
        tab[0] = 1;
        tab[1] = 4;
        tab[2] = 6;
    }

    const int * get() {
        return tab;
    }
};

int main() {
    A *a = new A();
    //(a->get())[0] = 2;
}
  • その後、テーブルの内容を見ることができますが、クラスの外でその値を変更することはできません。

  • 最後の行のコメントを外そうとすると、次のエラーが発生します: 読み取り専用の場所の割り当て '* a->A::get()' :)

于 2013-05-09T00:18:25.803 に答える
1

メソッド シグネチャでキーワードを使用して、const返されるものが定数であること、または変更不可能であることをコンパイラに伝える必要があります。ポインターを返すため、「変更できないポインター」と「変更できないデータへのポインター」を区別する方法と、どちらを指定するかを指定する方法も理解する必要があります。欲しいです。

于 2013-05-09T00:12:21.907 に答える
0

次のように定数型へのポインタを宣言します

type const * 

したがって、const 型へのポインターを返すメンバー関数の宣言は次のようになります。

type const * memberfunction();

タイプという単語を、返されるタイプに置き換えます。

返されるものは const であるため、変更できません。したがって、代入演算子、つまり = ; の左側には表示できません。また、一般的にはお勧めしない constsness をキャストしない限り、非 const パラメーターを介して関数またはメソッドに渡すことはできません。

于 2013-05-09T00:13:35.737 に答える