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