zoukankan      html  css  js  c++  java
  • const当做标记的函数重载,但是仅仅是限于类里面的成员函数

    (1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数。但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突:

    int fun(int i,char c='a'){
    
    }
    int fun(int i){
    
    }
    
    int main(){
      int i
      fun(i);//此时函数重载和函数默认参数就会出现问题,此时不知道具体调用的是哪一个函数
      fun(i,'b');//这样调用就不会出现错误,此时明确知道调用的是哪一个函数
      //出现上述重载函数时,int fun(int i)只要一调用就会出现错误
    
    }

    (2)在类的成员函数里面,const成员函数和非const成员函数可以出现重载,这是因为在成员函数中,const是用来修饰const成员函数的参数this指针的,故可以用来重载函数,但是这样用会不太好,如下代码

     1 /*
     2 *  Const_Overloda.h
     3 *
     4 */
     5 #ifndef CONST_OVERLOAD_H
     6 #define CONST_OVERLOAD
     7 class Const_Overload
     8 {
     9     int i;
    10 public:
    11     Const_Overload(int ii=0);
    12     ~Const_Overload();
    13     int f()const;
    14     int f();
    15 };
    16 #endif
     1 /*
     2 *  Const_Overloda.cpp
     3 *
     4 */
     5 
     6 #include "Const_Overload.h"
     7 #include<iostream>
     8 
     9 Const_Overload::Const_Overload(int ii) :i(ii)
    10 {
    11 }
    12 
    13 
    14 Const_Overload::~Const_Overload()
    15 {
    16 }
    17 int Const_Overload::f()const{
    18     std::cout << "f() const is running!" << std::endl;
    19     return i;
    20 }
    21 
    22 int Const_Overload::f(){
    23 
    24     std::cout << i << std::endl;
    25     return 0;
    26 }
     1 /*
     2 *   demo.cpp
     3 */
     4 
     5 #include"Const_Overload.h"
     6 #include<iostream>
     7 using namespace std;
     8 
     9 int main(){
    10     int i;
    11     Const_Overload v(12);
    12     v.f();//调用的是非const成员函数
    13     const Const_Overload v1(20);
    14     v1.f();//此时调用的是const成员函数
    15     system("pause");
    16     return 0;
    17 }

    上述代码中,我们用const重载了f函数,其实这种重载时虽然不违反语法规定,但是这种重载时没有实际含义的,因为两个函数功能完全不同,用重载是不符合常规的,应该把他们写成两个不同的函数名,而不是用重载

  • 相关阅读:
    回调函数(callback)是什么?
    类和对象的关系
    前端性能优化十四个规则:
    响应时间过长而导致网页问题的原因?
    给老爸更换电脑
    Notes for "Python in a Nutshell"
    Debian Jessie升级至Stretch小记
    将LibreOffice文档转换为豆瓣日记
    将Emacs Org任务树导出至Freeplane思维导图
    GNU/Linux下Freeplane的界面渲染问题
  • 原文地址:https://www.cnblogs.com/cplinux/p/5603212.html
Copyright © 2011-2022 走看看