因為c++有名命修飾,他會把每一個參數(shù)的類型啥的用一個字符串來表示加到函數(shù)名上。所以重載的兩個同名函數(shù)編譯出來的函數(shù)名不同,所以不沖突
創(chuàng)新互聯(lián)服務(wù)項目包括中衛(wèi)網(wǎng)站建設(shè)、中衛(wèi)網(wǎng)站制作、中衛(wèi)網(wǎng)頁制作以及中衛(wèi)網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,中衛(wèi)網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到中衛(wèi)省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
c沒有命名修飾,函數(shù)叫啥編譯出來就叫啥,同名函數(shù)當(dāng)然會沖突的
從字面上的意思就是,可以重復(fù)進入。可重入是在多任務(wù)系統(tǒng)下的概念,意思是這個函數(shù)可以在運行到任意位置的時候被中斷去執(zhí)行其他任務(wù),并且返回的時候不會出現(xiàn)任何錯誤。為什么在多任務(wù)的時候才有這種概念。我舉個例子,我們定義了一個叫func的函數(shù),同時定義了兩個線程,兩個線程都調(diào)用了func,那么就存在這種情況,線程1正在執(zhí)行func的時候,線程2開始執(zhí)行func了,導(dǎo)致兩個時刻兩個線程都在執(zhí)行func,正常情況下兩個都能執(zhí)行成功,并且沒有錯誤,我們就認(rèn)為func是可重入的。但是如果func使用了公共資源,比如讀取同一個文件,或者訪問了同一個全局變量,這時候就會導(dǎo)致兩個線程訪問公共資源時發(fā)生沖突,這樣的函數(shù)就是不可重入的。
c語言沒有重載的概念,重載是C++的內(nèi)容
c++運算符:
算術(shù)運算符:+,-,*,/,%,++,--;
位操作運算符:,|,~,^(位異或),<<(左移),>>(右移)
邏輯運算符:!,,||;
比較運算符:<,>,>=,<=,==,!=;
賦值運算符:=,+=,-=,*=,/=,%=,=,|=,^=,<<=,>>=;
其他運算符:[],(),->,,(逗號運算符),new,delete,new[],delete[],->*。
不能重載的總共五個:
(1)
"."(類成員訪問運算符)
(2)"
.*"(類成員指針訪問運算符)
(3)
"::"(域運算符)
(4)"siezof"(長度運算符)
(5)
"
?:"(條件運算符)
還有就是:typeid.
其中
.*是C++的類成員函數(shù)指針調(diào)用運算符,是用來調(diào)用一個類函數(shù)指針的。
舉例:
假設(shè)有一個ClassA類擁有一個成員函數(shù)void
ClassA::func(int
i),則可以這么用:
1
2
3
4
void
(ClassA::*fp)(int
i)
//
定義一個類函數(shù)指針。
ClassA
obj;
fp
=
ClassA::func;
//
給這個類函數(shù)指針賦值
(obj.*fp)(5);
//
這么用,相當(dāng)于調(diào)用obj.func(5);
沒有什么非禁止operator?:重載的理由,只不過沒有必要而已。另外,expr1?expr2:expr3的重載函數(shù)無法保證expr2和expr3中只有一個被執(zhí)行。
而“sizeof”無法被重載是因為不少內(nèi)部操作,比如指針加法,都依賴于它,例如:
X
a[10];
X*
p
=
a[3];
X*
q
=
a[3];
p++;
//
p
points
to
a[4]
//
thus
the
integer
value
of
p
must
be
//
sizeof(X)
larger
than
the
integer
value
of
q
這樣,sizeof(X)無法在不違背基本語言規(guī)則的前提下表達什么新的語義。
在N::m中,N和m都不是表達式,它們只是編譯器“認(rèn)識”的名字,“::”執(zhí)行的實際操作是編譯時的名字域解析,并沒有表達式的運算牽涉在內(nèi)?;蛟S有人會覺得重載一個“x::y”(其中x是實際對象,而非名字域或類名)是一個好主意,但這樣做引入了新的語法[譯注:重載的本意是讓操作符可以有新的語義,而不是更改語法——否則會引起混亂],我可不認(rèn)為新語法帶來的復(fù)雜性會給我們什么好處。
原則上來說,“.”運算符是可以被重載的,就像“-”一樣。不過,這會帶來語義的混淆——我們到底是想和“.”后面的對象打交道呢,還是“.”后面的東東所實際指向的實體打交道呢?看看這個例子(它假設(shè)“.”重載是可以的):
class
Y
{
public:
void
f();
//
...
};
class
X
{
//
assume
that
you
can
overload
.
public:
Y*
p;
Y
operator.()
{
return
*p;
}
void
f();
//
...
};
void
g(X
x)
{
x.f();
//
X::f
or
Y::f
or
error?
}
請注意:
1.
重載不能改變該運算符用于內(nèi)置類型時的函義,程序員不能改變運算符+用于兩個int型時的含義。
2.
運算符函數(shù)的參數(shù)至少有一個必須是類的對象或者類的對象的引用。這種規(guī)定可以防止程序員運用運算符改變內(nèi)置類型的函義。
3.
重載不能改變運算符的優(yōu)先級。
4.
重載不能改變運算符的結(jié)合律。
5.
重載不能改變運算符操作數(shù)的個數(shù)。比如+需要兩個操作數(shù),則重載的+也必須要有兩個操作數(shù)。
這個問題問的不錯。
其實printf不是重載,c語言不支持函數(shù)重載 這句話是對的。
printf函數(shù)是通過變長參數(shù)表實現(xiàn)的。你可以查看一下printf的函數(shù)原型聲明。
printf函數(shù)的實現(xiàn)在不同的機器上是不同的,但提供的接口是一致的。
printf函數(shù)的正確聲明形式如下:
int printf(const *fmt,...)
其中省略號表示參數(shù)表中參數(shù)的數(shù)量和類型是可變的。它是變長參數(shù)表的固定形式。
省略號只能出現(xiàn)在參數(shù)表的尾部。
具體的話你還是上網(wǎng)查查吧,我對這個原型也沒研究。
我想既然你能問這個問題,看點資料不難理解,很快能明白怎么回事。明白了以后,你就可以自己寫出這樣變長參數(shù)表的函數(shù)了。好好加油!
#include iostream
using namespace std;
class fun_overload{//定義一個重載函數(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){//輸出浮點型方法
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;
}
int x,y,n=0; // 這個語句只會初始化n為0,不會初始化x,y為0。
沒被初始化的變量x、y,其值隨機。所以程序執(zhí)行會有問題。
---
至于函數(shù)重載,C語言不支持,C++才支持。
查看codeblocks所用math.h,只有一個名為fabs的函數(shù),即
_CRTIMP double __cdecl fabs (double);
還有一個名為fabsf的函數(shù):
extern float __cdecl fabsf (float x);
因為#include cmath指令包含的是文件math.h,而math.h繼承至C語言,C語言不支持函數(shù)重載,所以fabs不會是重載函數(shù)。
當(dāng)前名稱:重載函數(shù)可以用在c語言嗎 C語言允許函數(shù)重載嗎
網(wǎng)站路徑:http://chinadenli.net/article16/doddpdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站收錄、網(wǎng)站改版、手機網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)