首先我们要知道类中函数和数据的布局:
如同上面这个图所示,每个对象都有自己的数据成员的位置,但是共同调用类的函数成员。
原因:
因为函数成员满足公用的条件,如果每个对象都保存一个函数成员,则消耗很大。
然后我们看下面代码:
根据上面所说,多个对象共同使用类的函数成员。
那么当对象a,b传到函数中时,函数怎样判断是哪个对象呢?
此时就使用到了this指针:上面的a其实被隐含转化成了this->a;
看下面的图:
扫描二维码关注公众号,回复:
12474303 查看本文章
- 当第一次进入类构造函数时,this指针的地址和a的地址一样
- 当第二次进入类构造函数时,this指针的地址和b的地址一样
这样通过this类就知道了是哪一个对象此时使用了共享的函数。
同一个类的对象,其成员函数地址是一样的,表示同一个类的对象的成员函数是共用的:
- 数据是独立的。
- 成员函数是共用的。
小知识:怎样通过函数指针调用函数
- 函数指针定义模板:typedef void(A::*x)();
- 使用:x m = &A::fun1;
- 调用:(a.*m)();
代码:
#include<iostream>
using namespace std;
class A{
public:
void fun1()
{
cout << "output something like this" << endl;
}
};
typedef void(A::*x)();
int main()
{
A a;
x m = &A::fun1;
(a.*m)();
system("pause");
return 0;
}