程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中的函數重載

C++中的函數重載

編輯:C++入門知識

C++中的函數重載


一. 函數的參數表嚴格匹配,空參代表沒有任何參數,void形參依然可以使用 二. 不再支持C語言中的隱式聲明方式,函數調用前必需先聲明或定義 三. 函數的返回類型int不能省略 四. 函數可以重載 1. 在同一作用域中,函數名相同,參數列表不同的函數可以存在若干個,其返回值任意 2. 當出現重載函數時,使用函數指針顯得有點問題,當給函數指針賦值時,指針的類型代表著具體的函數。 3. 函數重載的實現是基於函數名的編譯時改變 4. 當程序跨越編譯器或由其它語言調用重載函數時,函數名在編譯時編譯器不能對其改變,否則無法調用 5. extern“C” 可以告訴編譯器,像C語言那樣進行編譯處理。

//
//  main.cpp
//  day01-Function
//
//  Created by aiqiyisheng on 15/1/11.
//  Copyright (c) 2015年 HYR. All rights reserved.
//

#include 
using namespace std;

//在C語言中 不寫返回值類型 則默認返回整型int
/*
 *
 
fa();//聲明   聲明的時候參數可以不寫,定義的時候可以任意給參數
fa(int a,int b){//定義
    //函數體
}

 *
 */

/*
 
 在C++中的函數一定要寫返回值類型,如果沒有返回值,則寫void空的返回值
 
 C++中的參數如果你不寫的話,會默認給你一個void空參數
 
 */


//英雄打怪後增加經驗的函數
int addExp(int heroExp,int addExp){
    return heroExp + addExp;
}
//打打怪就會增長百分比的經驗
int addExp2(int heroExp,double addExpPtr){
    return heroExp * (1 + addExpPtr);
}

/*
void addExp2(int heroExp,double addExpPtr){
    //重載跟返回值類型無關
}
 */


/*
 * 方法重載
 * 
 
        方法名相同,參數列表不同(參數個數,參數類型,參數順序) 這樣就構成方法重載了   跟返回值類型無關
 
      編譯器在編譯的時候遇到相同名字的方法,編譯器可能會自己生成一個方法名,
例如:int addExp(int heroExp,int addExp)可能會生成這樣的方法名int addExp_i_i()....

    int addExp(int heroExp,double addExpPtr)可能會生成這樣的方法名int addExp_i_d()...
    在調用的時候編譯器會根據你給的參數去找對應的方法
 *
 *
 */


/*
 重寫  :子類重寫父類的方法
 
 
 */



int addExp(int heroExp,double addExpPtr){
    return heroExp * (1 + addExpPtr);
}



//告訴編譯器  該方法按照“C”語言的方式處理  (不會幫你重命名)
extern "C"
void test(){
    cout << "extern \"C\" 的作用" << endl;
}

//主函數
int main(int argc, const char * argv[])
{

    int heroExp = 1000;
    cout << addExp(heroExp, 100) << endl;
    cout << addExp2(heroExp, 0.5) << endl;
    
    cout << addExp(heroExp, 0.5) << endl;
    
    test();
    return 0;
}

運行結果如下:
1100
1500
1500
extern "C" 的作用
Program ended with exit code: 0



另外需要注意的是: 函數重載的時候要注意一點就是如果找不到匹配類型的,或者找到好幾個匹配類型的,該如何???

#include 
using namespace std;

//定義函數   函數重載

//如果找不到匹配的類型,C++會找一個相對合適的類型
//同樣  如果找到很多合適的類型  那也不知道該執行那一個,例如注釋掉int的方法
//void fa(char ch){ cout << "fa(char ch)" << endl;}
//void fa(short st){ cout << "fa(short st)" << endl;}
void fa(int it){ cout << "fa(int it)" << endl;}
void fa(long lg){ cout << "fa(long lg)" << endl;}
void fa(float ft){ cout << "fa(float ft)" << endl;}
void fa(double de){ cout << "fa(double de)" << endl;}


int main(){
    //聲明變量
    char ch;
    short st;
    int it;
    long lg;
    float ft;
    double de;
    //
    fa(ch);
    fa(st);
    fa(it);
    fa(lg);
    fa(ft);
    fa(de);
    
    return 0;
}


運行結果如下:

fa(int it)
fa(int it)
fa(int it)
fa(long lg)
fa(float ft)
fa(double de)
Program ended with exit code: 0












  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved