const与重载

最近在学习重载函数,所以在这里总结一下:

看到重载二字,我们不由想起几个问题:

什么叫函数重载?为什么要用函数重载?

函数重载为什么不需要考虑返回值类型?

函数重载的条件有哪些?

接下来一一解答:

1、什么叫函数重载,为什么要用函数重载:

函数重载就是在同一作用域内,函数名相同,参数列表不同的几个函数(不要求返回类型);重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

我们这里说在同一作用域内,为什么要强调在同一作用域内呢?

如果局部地声明一个函数,则该函数是屏蔽外层作用域中的同名函数而不是重载。  这就像一般的作用域规则一样,很好理解。
这样一个规则告知了一个事实,即每一个版本的重载函数都应该在同一个作用域中声明。

让我们看一个很有趣的例子。
void print(const string &);
void print (double)
void func(int a)

{
void print(int);
print("value");
print (12.34);
print(a);
}
在这里,后面两个都会调用print(int)函数。  

名字查找发生在类型检查之前,这就是作用域的成果!


2、重载函数为什么不考虑返回值类型?

举个例子


int func()

float func()

char func()

void func()

这里有四个函数,如果你用int i =func();    确实,此时我们是可以区分我们这四个函数的,但是我们有时会这么使用func(),  那么此时编译器该如何识别我们调用的是哪个函数呢?所以我们不能根据安徽之类型的不同来判断函数重载!


3、函数重载的条件有哪些?

之前我们在给出重载定义的时候已经给出了两个条件:那就是函数名相同,参数列表不同

那么第三个条件是什么?其实说是条件,不如说是一种判断是否重载的方法  :

看能不能通过修改形参那来影响实参的值

这也就涉及到了const的使用

首先先说一下const的使用方法:

const:const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。


在我们使用const的时候,必须保证编译器不能直接或者间接的修改const修饰的常量的值,也就要求我们不能用普通指针指向一个常量(对于一级指针)。

举个简单的例子:

const  int a=10;

int *p=&a;

这就是所谓的定义了一个普通指针指向了一个常量,我们在a的前面加了const,就是将10这个常量给了a,通俗的讲,a就是10,我们之后每次遇到a的时候,编译器都会将a自动替换为10;所以我们再定义一个普通的一级指针指向10的地址。我们知道,常量是不能取地址的,所以上述代码应该是错误的。


const如果在星号左边,那么表示被指物是常量,const如果在星号右边,表示指针自身是常量

如:const int *p                          //表示被指物是常量,也就是*p是常量,也就是p指向的地址的值是不可改变的

       int const * p                          //虽然const的位置发生了改变,但是仍然位于星号的左边,所以与上面的相同

       int  * const p                         //表示指针本身是常量,也就是p的只想不能发生改变


举几个例子:

void func1(int &a)        void func1(const int &a)   重载

void func2(int a)           void func2(const int a)     重定义

void func3(int *a)         void func3(const int * a)   重载

void func4(int *a)          void func4(int * const a)   重定义






    









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值