class ss{
public:
int a;
void solve(){
a=10;
}
};
ss t;
ss p;
t.solve();p.solve();
对于类,上面是对类的一个声明,而下面是定义一个具体的对象,所以类中的int a
也同样是声明,只有具体定义的变量中才会有int a
,所以可以t.a=....
调用t中的a,所以这里的int a
是变量t
的,而这里的solve
函数是谁的,我们可能会下意识觉得是变量t
的,但其实他是类ss
的,是公共的,那么他既然是公共的,如果有多个变量调用solve
,它能正确的修改成员变量么,如何修改,答案是可以的,利用的是c++中的this
这个关键字,我们可以把上面这个solve函数用c语言中的指针实现
void solve(ss *t){
t->a=10;
}//与上面的效果一致
由此我们可以发现,只需要知道它具体的指针就可以准确作用到成员变量,所以原来类中的代码就可以用this改成
void solve(){
this->a=10;
}
可以发现与c语言实现的基本一致。
证明:
class ss{
public:
int a;
void solve(){
a=10;
printf("solve.a=%p\n",&a);
}
};
int main(){
ss t;
printf("t=%p\n",&t);
printf("t.a=%p\n",&(t.a));
t.solve();
return 0;
}
我们可以看出变量t
,t
中的a
,solve函数中的a
的地址都是相同的,由此可以说明函数的确自动确定了使用的成员变量的地址。