1. ホーム
  2. c++

[解決済み] c++の":: "と"->"の違いは何ですか?c++の". "と" ->"の違い [重複].

2023-03-06 14:17:43

質問

というクラスを作成しました。 Kwadrat . このクラスには、3つの int フィールドがあります。私の 開発環境 からフィールドにアクセスすることを示唆しています。 Kwadrat を経由して作成されたオブジェクトの :: & -> という演算子があります。両方の演算子を試してみたところ -> 演算子はオブジェクトフィールドのデータに正常にアクセスすることができましたが、同じことが -> 演算子には当てはまりません。 また、私は . 演算子はクラスのメンバーにもアクセスします。私は混乱しており、なぜオブジェクトのメンバー &/or メソッドにアクセスするための3つのメンバーがあるのか理解できません。どなたか、この3つの演算子の違いを説明していただけませんか?


          1. ->

          2. ::

          3. .




    #include <iostream>

    using namespace std;

    class Kwadrat{

    public: 
        int val1,
            val2,
            val3;

        Kwadrat(int val1, int val2, int val3)
        {
            this->val1 = val1; // Working
            this.val2 = val2;  // Doesn't Work!
            this::val3 = val3; // Doesn't Work!
        }
    };


    int main()
    {
        Kwadrat* kwadrat = new Kwadrat(1,2,3);

        cout<<kwadrat->val1<<endl;
        cout<<kwadrat->val2<<endl;
        cout<<kwadrat->val3<<endl;

        return 0;
    }



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

1. -> を介して、オブジェクトのメンバ変数やメソッドにアクセスするための pointer を経由してオブジェクトにアクセスします。

Foo *foo = new Foo();
foo->member_var = 10;
foo->member_func();

2. . を経由してオブジェクトのメンバ変数やメソッドにアクセスするためのものです。 instance

Foo foo;
foo.member_var = 10;
foo.member_func();

3. :: の静的変数やメソッドにアクセスするためのものです。 class/struct または namespace . また、別のスコープから変数や関数にアクセスするために使用することもできます(実際にはクラス、構造体、名前空間がこの場合のスコープとなります)。

int some_val = Foo::static_var;
Foo::static_method();
int max_int = std::numeric_limits<int>::max();