类的member functions 保存在什么地方?
--------------------------------------------------------------------------
类的member functions不保存在类中,它们不会在类中留下任何“蛛丝马迹”,而且整个类只有一份member functions,不像non static data members,每个对象有一份。
class object如何调用class memmber functions
------------------------------------------------------------------------------
类的成员函数在编译时会被“name mangling(名称重整)”,下面具个例子给楼主说明一下如何通过类对象调用member function(仅仅是个例子,编译器的做法可能大同小异)。
class foo{
public:
int i;
void test(int a){
i = a;
}
};
foo f;
f.test(5);//调用成员函数
上面程序经过编译器整理后可能变成下面样子:
struct foo{
public:
int i;
};
void test_foo(foo *const this, int a){//原来的成员函数现在变成了一个全局函数(或者说是“名字空间域函数”),而且名字被“重整”了,以反映出原来是“class foo”的成员(再次强调一下,不同编译器有不同的重整方法)。而且,增加了一个新的参数"this",见下面的调用方式,就明白他的用途了
this->i =a;//通过this指针访问对象的数据成员
}
foo f;
test_foo(&f, 5);//将对象f的地址作为this指针传递给test_foo函数,以便访问数据成员