基于const的重载(牛客c++专项练习总结)

前言

函数重载的本质是形参表的本质不同,深入了解const重载


①对于普通函数 int test (int a) 和 int test (const int a);int a和const int a是 整型常量和整型变量,有无const是一样,因为函数调用的时候,存在形实结合的过程,所以不管有没有const都不会改变实参的值,故重载无效。
② fun(char *a) 和 fun(char * const a) char *a是指针变量 而char *const a是指针常量,都是指向字符串变量,这就和int i和const int i的关系一样了,类似于上条
(指针常量,指针的指向不可以改变,详见上一条博客指针常量和常量指针的本质
③ fun(char *a)和fun(const char *a);一个是字符串变量,另一个指向的是字符串常量,不同的参数调用不同的函数,重载生效
④类中基于const的重载 普通函数是有效的

Class A {
int test ();
int test() const;
};

const版本的函数使得作为形参的this指针的类型变为指向const对象的指针,而非const版本的使得作为形参的this指针就是正常版本的指针。
①const对象和非const对象都可以调用基于const的函数,
②const对象只能调用const版本的函数,
③非const对象可以调用常成员函数,也能够调用普通成员函数,
函载函数在最佳匹配过程中,对于const对象调用的就选取const版本的成员函数,而普通的对象会优先调用普通成员函数;

1.基于const重载的代码如下(示例):

using namespace std;
class A{
    public:
        virtual void f() { cout << "A::f() "; }
        void f() const { cout << "A::f() const "; }
};
class B : public A {
    public:
        void f() { cout << "B::f() "; }
        void f() const { cout << "B::f() const "; }
};
void g(const A* a) {
    a->f();
}
int main(int argc, char *argv[]) {
    A* p = new B();
    p->f();
    g(p);
    delete(p);
    return 0;
}

2.结果

在这里插入图片描述


总结

①.当使用引用传参、指针传参时,指向const对象的指针和指向非const对象的指针做形参的函数是不同的,重载生效。
②当时有普通函数的参数中,有无const一样,重载无效,但普通函数在类中,重载生效。

tips
如果对你有帮助,创作不易,点赞支持一下叭!
如有不妥之处,欢迎一起交流学习进步!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值