c++ const 成员函数

本文深入探讨了C++中const成员函数的重载机制,通过实例讲解了如何通过添加const修饰符实现成员函数的重载,并分析了其背后的原理。同时,文章还对比了普通函数在引用和指针参数上使用const进行重载的情况。

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

第一个事实:

某类中可以这么声明定义两个函数,可以重载(overload)

void pa(){
    cout<<"a"<<endl;
}
void pa() const{
    cout<<"b"<<endl;
}

上面的写法是正确的。

基于这个事实,我思考了一下它的机制。

试验得出,

第二个事实:

普通函数(不是类的成员函数),可以这样来重载(overload):

void fun(const int &a)
{
    cout<<a<<endl;
}
void fun(int &a)
{
    cout<<a<<endl;
}

第二个事实说明了:如果函数参数是【引用类型】,那么【const】 和 【不加const】 可以重载。

第三个事实:

普通函数(不是类的成员函数),也可以用指针这样来重载(overload):

void test(const int* a){
    cout<<*a<<endl;
}
void test(int* a){
    cout<<*a<<endl;
}

第三个事实说明了,指针也可以在前面加 const 和 不加const 来重载。

分析第一个事实:

按照c++ primer里面的说法,一个成员函数本身有一个隐式的参数: ClassName* const this//不要管这个const,跟本文主题无关.

但是还是先来解释一下这个const,就是说,一个指针,本身不能再指向别人了,只能指向自己。

所以,你在类里面不能更改this的值,

this = 0;//错误!

再来说这两个类成员函数:

void pa();
void pa() const;

可以写全,成为好理解的伪代码,像这样:

void pa(ClassName *const this);
void pa(const ClassName *const this);

第一个好理解,上面已经说过了。

第二个就是,c++提供给使用者的一个特殊语法,就是说成员函数加const,这个const实际上就是加给了隐式参数this的前面。

好了,总结:

这就是为什么成员函数可以通过加const修饰符来重载。

 

posted on 2015-09-22 14:20  一页天书不分说 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/onebook/p/4828836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值