- 论坛徽章:
- 0
|
对象封装数据和对数据的操作,但是编译器在生成对象时,显然不会为每个对象都创建一个成员函数的副本,这样会相当浪费空间,于是,编译器就把对象的非静态成员变量放到了一起,形成一个连续的存储区域,但是成员函数如何才能找到对象的数据呢,就是this指针来做到的。
class A{
int some;
void somefun();
static void somestatic();
}
int main(){
A a;
a.somefun();
A::somestatic();
}
1)对于非静态成员函数 somefunc(),编译器会为其添加一个用户不可见的参数,这就是this,实际上somefunc()=somefunc(A* this),在a.somefunc()调用中,实际上的调用方式是 somefunc(&a)。在somefunc()内部,对对象属性的引用一律采用this->some的方式直接指向对象属性。
2)对于静态成员函数,因为它属于类,所以编译器并不自动为其添加this指针,因此在静态成员函数内部根本就没有对象的指针,所以静态成员内部无法访问对象成员变量(类的非静态成员变量) |
|