我创建了一个名为*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();