how class object call class member functions in c++

本文解释了类的成员函数并非存储在类中,而是独立存在,并探讨了成员函数如何通过类对象进行调用的过程。文章还展示了成员函数在编译后的实际形式,即转换为全局函数,并通过this指针来访问对象的数据成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值