其他分享
首页 > 其他分享> > 6-4 函数重载

6-4 函数重载

作者:互联网

目录

6.4.1 重载与const

重载与const形参

参数调用时会忽略顶层const,而不会忽略底层const

// 重复声明了lookup
void lookup(int i);
void lookup(const int i);
// 重复声明了lookup
void lookup(int *i);
void lookuo(int* const p);
void lookup(int &i);       //作用于int的引用
void lookup(const int &i); //新函数,作用于int的常量引用

void lookup(int *i);       //作用于int的指针
void lookup(const int* p); //作用于指向int常量的指针

注:由于非const类型参数可以转换为常量类型,而const类型参数不能转换为其他类型。

所以任何类型的参数都可以传给以const类型为形参的函数,且const类型只能传给以const类型为形参的函数。

那么,当要把const对象当作传入以非const对象为形参的函数时该怎么办呢?使用const_cast。【见下文】

重载与const_cast的使用

const_cast介绍

const_cast<去const后的指针或引用>(const指针或引用)

const_cast与重载

#include<iostream>
using namespace std;
void sum(int &r1, int &r2);

int main(){
    const int m=1, n=2;
    const int &r1 = m, &r2 = n;
    // sum(r1,r2);           //编译错误,const int&无法转换为int&
    sum(const_cast<int&>(r1),const_cast<int&>(r2));  //编译成功,去除const限定符
    return 0;
}
void sum(int &r1, int &r2){
    cout<<"sum : "<<r1+r2<<endl;
}
/*
sum : 3
*/

6.4.2 重载与作用域

对于刚接触C++的程序员来说,不太容易理清作用域和重载的关系。其实,重载对作用域的一般性质并没有什么改变:如果我们在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。在不同的作用域中无法重载函数名:

image-20220123121828337

image-20220123121841462

标签:const,函数,int,void,cast,lookup,重载
来源: https://www.cnblogs.com/timothy020/p/15914804.html