如何在c++中使用常量实现函数重载

  介绍

这篇文章将为大家详细讲解有关如何在c++中使用常量实现函数重载,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>成员函数

声明:& lt;类型标志符祝辞函数名(参数表)常量;

说明:

(1)常量是函数类型的一部分,在实现部分也要带该关键字。

(2) const关键字可以用于对重载函数的区分。

(3)常成员函数不能更新类的成员变量,也不能调用该类中没有用常量修饰的成员函数,只能调用常成员函数。

(4)非常量对象也可以调用常成员函数,但是如果有重载的非常成员函数则会调用非常成员函数。

重载看例子:

# include,   using  namespace 性病,   class  Test    {,   保护:   int 才能,x,,   公众:   Test 才能;(int 我):x (i), {,},   void 才能;有趣的(),const    ,{大敌;   ,,,cout  & lt; & lt;,“有趣的(),const  nbsp;“, & lt; & lt;, endl;,   ,,},   void 才能;有趣的(),   ,{大敌;   ,,,cout  & lt; & lt;,“有趣的(),nbsp;“, & lt; & lt;, endl;,   ,,},   },,   int  main (),   {,   Test 才能;t1  (10),,   const 才能;Test  t2  (20),,   t1.fun才能(),,   t2.fun才能(),,   ,,return  0;   }

结果为:

如何在c++中使用常量实现函数重载

const修饰成员函数时的重载

分两种情况,一种情况下不允许重载,另一种允许。还是直接看例子吧:

# include,   using  namespace 性病,   void 乐趣(const  int 我),   {,   cout 才能;& lt; & lt;,“有趣(const  int), nbsp;“,   },   void 乐趣(int 我),   {,   cout 才能;& lt; & lt;,“有趣(int ), nbsp;“,,,,   },   int  main (),   {,   const 才能;int 小姐:=,10;,   乐趣才能(i),,   ,,return  0;   }

结果:编译错误,提示重定义:

如何在c++中使用常量实现函数重载

其实很好理解:

void  (int )和乐趣   void 乐趣(const  int );

实际上没有区别,因为函数调用的时候,存在形实结合的过程,所以不管有没有常量都不会改变实参的值。

但是看下面的情况:

# include,   using  namespace 性病,   void 乐趣(char  *),   {,   ,cout  & lt; & lt;“non-const 有趣的(),“,& lt; & lt;,,,   },   void 有趣(const  char  *),   {,   ,cout  & lt; & lt;“const 有趣的(),“,& lt; & lt;,,,   },   int  main (),   {,   ,const  char  * ptr =,“hello  world",,   ,有趣的(ptr);   ,return  0;   }

结果:通过编译,且输出结果为:

如何在c++中使用常量实现函数重载

很奇怪是吗,这种情况和上面的情况难道不一样吗?

先别急,再来看一个例子。然后再解释。

# include,   using  namespace 性病,   void 乐趣(char  *),   {,   ,cout  & lt; & lt;“non-const 有趣的(),“,& lt; & lt;,,,   },   void 乐趣(char  *, const  a),   {,   ,cout  & lt; & lt;“const 有趣的(),“,& lt; & lt;,,,   },   int  main (),   {,   ,char  ptr [],=,“hello  world",,   ,有趣的(ptr);   ,return  0;   }

结果:编译不通过,提示重定义:

如何在c++中使用常量实现函数重载

好了,现在解释原因。

第一个例子中,我们说,乐趣(int i)和乐趣(const int i)是一样的,是因为函数调用中存在实参和形参的结合。加入我们用的实参是int,那么这两个函数都不会改变一个的值,这两个函数对于一个来说是没有任何区别的,所以不能通过编译,提示重定义。

好了,那<代码>乐趣(char *)和乐趣(const char *) 是一样的吗?答案是:不一样,因为char *中一个指向的是一个字符串变量,而const char *一指向的是一个字符串常量,所以当参数为字符串常量时,调用第二个函数,而当函数是字符串变量时,调用第一个函数。

如何在c++中使用常量实现函数重载