#include stdio.h
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、成都手機(jī)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。
#include stdlib.h
#include math.h
int main(void)
{
int a,b,c,d;
double x1,x2;
printf("輸入a,b,c(a不為0,數(shù)據(jù)間以空格隔開):");
scanf("%d %d %d",a,b,c);
d=b*b-4*a*c;//b^2在c里面不是平方 ^異或運(yùn)算符
if(d=0)//用整形比較才比較精確
{
x1=(-b+sqrt((double)d))/(2.0*a);//說(shuō)是有多個(gè)參數(shù) 可以float 可以double 你輸入int的編譯器不知道轉(zhuǎn)換為哪一種
x2=(-b+sqrt((double)d))/(2.0*a);
printf("方程的根為:%f,%f.\n",x1,x2);
}
else
{
printf("方程無(wú)實(shí)根.\n");
}
system("pause");
return 0;
}
親,你說(shuō)的是函數(shù)重載吧?
重構(gòu)是指代碼重構(gòu),就是重新寫代碼,因?yàn)榍懊鎸戇^(guò)一次,所以再寫的時(shí)候可能會(huì)有更好的想法,就像做作業(yè)檢查一樣。
函數(shù)重載是指函數(shù)名一樣,參數(shù)不一樣,即為函數(shù)重載:
int func(int a){....},int func(char *p){....}和int func(int *p){....}都是它的重載函數(shù)
不知道你明白沒有
1.從C語(yǔ)言的語(yǔ)法設(shè)計(jì)來(lái)說(shuō)是不支持的,早期的C編譯器未考慮過(guò)函數(shù)重載這一功能,所以就會(huì)有那么多類似的函數(shù)abs,labs,fabs等等(每種類型都要考慮一個(gè)不同的函數(shù)名)。
2.C語(yǔ)言標(biāo)準(zhǔn)就規(guī)定不允許同一作用域中兩個(gè)函數(shù)重名。和C語(yǔ)言相關(guān)的域有兩種,一個(gè)是給編譯器看得,還有一種是給鏈接器看的,而給編譯器看的這種域主要是關(guān)于
變量的可見范圍,而鏈接器看到的那個(gè)是叫文件域,而全局域可能要跨越好幾個(gè)文件域,這樣只要兩個(gè)同名函數(shù)用static修飾,并且在不同的文件中,就不會(huì)
沖突。不過(guò)這個(gè)實(shí)際上已經(jīng)超越了編譯器的范圍,表面看起來(lái)兩個(gè)函數(shù)同名,但是實(shí)際上編譯器為鏈接器產(chǎn)生是指向的同一個(gè)函數(shù)地址。
3.函數(shù)重載是一個(gè)編譯期行為,主要是通過(guò)name mangling來(lái)產(chǎn)生不同的匯編符號(hào),讓linker可以正確的link代碼。
4.但是,C語(yǔ)言作為一個(gè)具有超強(qiáng)功能的底層語(yǔ)言,是有辦法進(jìn)行模擬函數(shù)重載的。那就是函數(shù)指針。最簡(jiǎn)單的例子就是qsort函數(shù)。這個(gè)函數(shù)可以傳遞一個(gè)函數(shù)指針變量,通過(guò)不同的函數(shù)指針,可以對(duì)不同的數(shù)據(jù)類型就行相同的qsort操作,從某種層面來(lái)說(shuō)相當(dāng)于函數(shù)重載。
#include iostream
using namespace std;
class fun_overload{//定義一個(gè)重載函數(shù)類
public:
void display(int int_num ){//輸出整型方法
cout"int: "int_numendl;
}
void display(char cha_num ){//輸出字符方法
cout"char: "cha_numendl;
}
void display( double dou_num ){//輸出雙精度型方法
cout"double: "dou_numendl;
}
void display( float flo_num){//輸出浮點(diǎn)型方法
cout"float: "flo_numendl;
}
void display(short sho_num ){//輸出短整型方法
cout"short: "sho_numendl;
}
fun_overload(){};//構(gòu)造
~fun_overload(){};//析構(gòu)
};
int main()
{
fun_overload *f=0;
int a=1;
char b='a';
double c=1.1;
float d=1.110f;
short e=1;
//指針調(diào)用fun_overlaod類里的不同類型的函數(shù)
f-display(a );
f-display(b );
f-display(c );
f-display(d );
f-display(e );
getchar();
system("cls");
return 0;
}
c語(yǔ)言寫重載函數(shù):
首先明確重載函數(shù)的定義:在相同的聲明域中的函數(shù)名相同的,而參數(shù)表不同的,即通過(guò)函數(shù)的參數(shù)表而唯一標(biāo)識(shí)并且來(lái)區(qū)分函數(shù)的一種特殊的函數(shù)。
當(dāng)將要定義一組函數(shù),使它們執(zhí)行一系列的操作,但是它們是應(yīng)用在不同的參數(shù)類型上的。此時(shí)可以選擇重載函數(shù)。
例如:
上面的三個(gè)函數(shù)都可以大概地說(shuō)成判斷一組數(shù)中的最大值,對(duì)于函數(shù)的用戶來(lái)說(shuō),他們并不關(guān)心函數(shù)定義的細(xì)節(jié),也就是說(shuō)他們不關(guān)心判斷兩個(gè)整數(shù)的大小和判斷數(shù)組(vector容器)數(shù)的大小應(yīng)該使用不同的函數(shù),而對(duì)于程序的設(shè)計(jì)者來(lái)說(shuō)這可是不得不想到的。程序員必須記住并查找每個(gè)函數(shù)名。而函數(shù)的重載把程序員從這種問題的復(fù)雜性中解放了出來(lái),C++提供了這種支持。
上面的三個(gè)比較大小的函數(shù)可以定義成:
通過(guò)參數(shù)就可以一眼分辨不同的函數(shù)。