c語言中函數(shù)不能重載 c語言有方法的重載嗎

c語言,c++,哪些運(yùn)算符不能重載?

c語言沒有重載的概念,重載是C++的內(nèi)容

創(chuàng)新互聯(lián)建站基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)資陽移動機(jī)房報價,主機(jī)托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。

c++運(yùn)算符:

算術(shù)運(yùn)算符:+,-,*,/,%,++,--;

位操作運(yùn)算符:,|,~,^(位異或),<<(左移),>>(右移)

邏輯運(yùn)算符:!,,||;

比較運(yùn)算符:<,>,>=,<=,==,!=;

賦值運(yùn)算符:=,+=,-=,*=,/=,%=,=,|=,^=,<<=,>>=;

其他運(yùn)算符:[],(),->,,(逗號運(yùn)算符),new,delete,new[],delete[],->*。

不能重載的總共五個:

(1)

"."(類成員訪問運(yùn)算符)

(2)"

.*"(類成員指針訪問運(yùn)算符)

(3)

"::"(域運(yùn)算符)

(4)"siezof"(長度運(yùn)算符)

(5)

"

?:"(條件運(yùn)算符)

還有就是:typeid.

其中

.*是C++的類成員函數(shù)指針調(diào)用運(yùn)算符,是用來調(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ī)則的前提下表達(dá)什么新的語義。

在N::m中,N和m都不是表達(dá)式,它們只是編譯器“認(rèn)識”的名字,“::”執(zhí)行的實(shí)際操作是編譯時的名字域解析,并沒有表達(dá)式的運(yùn)算牽涉在內(nèi)?;蛟S有人會覺得重載一個“x::y”(其中x是實(shí)際對象,而非名字域或類名)是一個好主意,但這樣做引入了新的語法[譯注:重載的本意是讓操作符可以有新的語義,而不是更改語法——否則會引起混亂],我可不認(rèn)為新語法帶來的復(fù)雜性會給我們什么好處。

原則上來說,“.”運(yùn)算符是可以被重載的,就像“-”一樣。不過,這會帶來語義的混淆——我們到底是想和“.”后面的對象打交道呢,還是“.”后面的東東所實(shí)際指向的實(shí)體打交道呢?看看這個例子(它假設(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.

重載不能改變該運(yùn)算符用于內(nèi)置類型時的函義,程序員不能改變運(yùn)算符+用于兩個int型時的含義。

2.

運(yùn)算符函數(shù)的參數(shù)至少有一個必須是類的對象或者類的對象的引用。這種規(guī)定可以防止程序員運(yùn)用運(yùn)算符改變內(nèi)置類型的函義。

3.

重載不能改變運(yùn)算符的優(yōu)先級。

4.

重載不能改變運(yùn)算符的結(jié)合律。

5.

重載不能改變運(yùn)算符操作數(shù)的個數(shù)。比如+需要兩個操作數(shù),則重載的+也必須要有兩個操作數(shù)。

C語言里的函數(shù)是否可以進(jìn)行重載嗎?

標(biāo)準(zhǔn)C, 不支持函數(shù)重載。

函數(shù)重載是C++的概念。 不光是類的成員函數(shù), 一般函數(shù)以及模板函數(shù)都是可以重載的。

C語言可不可以重載?

1.從C語言的語法設(shè)計來說是不支持的,早期的C編譯器未考慮過函數(shù)重載這一功能,所以就會有那么多類似的函數(shù)abs,labs,fabs等等(每種類型都要考慮一個不同的函數(shù)名)。\x0d\x0a2.C語言標(biāo)準(zhǔn)就規(guī)定不允許同一作用域中兩個函數(shù)重名。和C語言相關(guān)的域有兩種,一個是給編譯器看得,還有一種是給鏈接器看的,而給編譯器看的這種域主要是關(guān)于\x0d\x0a變量的可見范圍,而鏈接器看到的那個是叫文件域,而全局域可能要跨越好幾個文件域,這樣只要兩個同名函數(shù)用static修飾,并且在不同的文件中,就不會\x0d\x0a沖突。不過這個實(shí)際上已經(jīng)超越了編譯器的范圍,表面看起來兩個函數(shù)同名,但是實(shí)際上編譯器為鏈接器產(chǎn)生是指向的同一個函數(shù)地址。 \x0d\x0a3.函數(shù)重載是一個編譯期行為,主要是通過name mangling來產(chǎn)生不同的匯編符號,讓linker可以正確的link代碼。\x0d\x0a4.但是,C語言作為一個具有超強(qiáng)功能的底層語言,是有辦法進(jìn)行模擬函數(shù)重載的。那就是函數(shù)指針。最簡單的例子就是qsort函數(shù)。這個函數(shù)可以傳遞一個函數(shù)指針變量,通過不同的函數(shù)指針,可以對不同的數(shù)據(jù)類型就行相同的qsort操作,從某種層面來說相當(dāng)于函數(shù)重載。

本文名稱:c語言中函數(shù)不能重載 c語言有方法的重載嗎
分享路徑:http://www.muchs.cn/article38/hhispp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站內(nèi)鏈、微信公眾號定制開發(fā)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)