1. ホーム
  2. c++

[解決済み] (->) 矢印演算子および (.) ドット演算子、クラスポインタ

2022-03-02 04:49:03

質問

C++では、クラスのポインタには、( -> のような矢印演算子を使って、そのクラスのメンバにアクセスします。

#include <iostream>
using namespace std;

class myclass{
    private:
        int a,b;
    public:
        void setdata(int i,int j){
            a=i;
            b=j;
        }
};

int main() {
    myclass *p;
    p = new myclass;
    p->setdata(5,6);
    return 0;
}

の配列を作成します。 myclass .

p=new myclass[10];

にアクセスすると myclass を経由したメンバー( -> ) 矢印演算子を使用すると、以下のエラーが発生します。

base operand of '->' has non-pointer type 'myclass'

を使用してクラスメンバーにアクセスしますが、( . ) 演算子を使用すると、動作します。これらのことが私を混乱させています。なぜ、( . ) 演算子で、クラスの配列を指定できますか?

どのように解決するのですか?

との違いについては、こちらをご覧ください。 ポインターとリファレンス この問題を理解するのに役立つかもしれません。

要するに、その差は
を宣言すると myclass *p はポインタであり、そのメンバにアクセスするには -> というのも p はメモリの場所を指しています。

を呼び出すと同時に p=new myclass[10]; p は配列を指すようになり p[n] を使用すると、そのメンバにアクセスする必要があります。 . .
しかし、もしあなたが p->member = smth を呼び出したのと同じになります。 p[0].member = smth の中に数字があるので [] からのオフセットです。 p で、次の配列のメンバを検索します。 (p + 5)->member = smth と同じになります。 p[5].member = smth