我创建了一个名为*Kwadrat* 。班级有三个int字段。我的发展环境 建议我从*Kwadrat* 通过**::** 和**->** 操作员。我尝试了两个操作员,发现**->** 操作员能够成功地访问对象字段中的数据,尽管对于该数据而言,也不能说相同**->** 操作员。我还发现**.**操作员也将访问班级成员。我很困惑,不明白为什么有三个访问对象成员和/或方法的成员。有人可以向我解释这三个操作员有什么区别?


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();

来自: stackoverflow.com