how class object call class member functions in c++

类的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函数,以便访问数据成员
       
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值