⑴ c語言怎麼寫重載函數
c語言寫重載函數:
首先明確重載函數的定義:在相同的聲明域中的函數名相同的,而參數表不同的,即通過函數的參數表而唯一標識並且來區分函數的一種特殊的函數。
當將要定義一組函數,使它們執行一系列的操作,但是它們是應用在不同的參數類型上的。此時可以選擇重載函數。
例如:
通過參數就可以一眼分辨不同的函數。
⑵ C語言中的重載問題
sum(1,2)可以是調用sum(int,int)也可以是調用sum(float,float)
因為傳遞進去的1和2,可以被編譯器轉換成sum(1.0,2.0),編譯器不確定你要調用哪個
同理sum(1.2,2.4)也可能被編譯器轉換成sum(1,2),也不能確定你要調用哪個
sum(1.3,2.4)改成sum((float)1.3,(float)2.4)就可以了,如果寫成sum((float)1.3,2.4)或者sum(1.3,(float)2.4)也可以通過編譯,但是可能會有警告
用顯示的類型轉換來清楚地告訴編譯器要調用哪個
⑶ c語言,c++,哪些運算符不能重載
c語言沒有重載的概念,重載是C++的內容
c++運算符:
算術運算符:+,-,*,/,%,++,--;
位操作運算符:&,|,~,^(位異或),<<(左移),>>(右移)
邏輯運算符:!,&&,||;
比較運算符:<,>,>=,<=,==,!=;
賦此悉值運算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
其他運算符:[],(),->,,(逗號運算符),new,delete,new[],delete[],->*。
不能重載的總共五個:
(1)
"."(類成員訪問運算符)
(2)"
.*"(類成員指針訪問運算符)
(3)
"::"(域運算符)
(4)"siezof"(長度運算符)
(5)
"
?:"(條件運算符)
還有就是:typeid.
其中
.*是C++的類成員函數指針調用運算符,是用來調用一個類函數指針的。
舉例:
假設有一個ClassA類擁有一個成員函數void
ClassA::func(int
i),則可以這么用:
1
2
3
4
void
(ClassA::*fp)(int
i)
//
定義一個類函數指針。
ClassA
obj;
fp
=
&ClassA::func;
//
給這個類函數指針賦值
(obj.*fp)(5);
//
這么用,相當於調用obj.func(5);
沒有什麼非禁止operator?:重載的理由,只不過沒有必要而已。另外,expr1?expr2:expr3的重載函數無法保證expr2和expr3中只有一個被執行。
而「sizeof」無法被重載是因為不少內部操作,比如指針加法,都依賴於閉姿它,例如:
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)無法在不違背基本語言規則的前提下表達什麼新的語義。
在N::m中,N和m都不是表達式,它們只是編譯器「認識」的名字,「::」執行的實際操作是編譯時的名字域解析,並沒有表達式的運算牽涉在內。或許有人會覺得重載一個「x::y」(其中x是實際對象,而非名字域或類名)是一個好主意,但這樣做引入了新的語法[譯註:重載的本意是讓操作符可以有新的語義,而不是更改語法——否則會引起混亂轎扒絕],我可不認為新語法帶來的復雜性會給我們什麼好處。
原則上來說,「.」運算符是可以被重載的,就像「->」一樣。不過,這會帶來語義的混淆——我們到底是想和「.」後面的對象打交道呢,還是「.」後面的東東所實際指向的實體打交道呢?看看這個例子(它假設「.」重載是可以的):
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.
重載不能改變該運算符用於內置類型時的函義,程序員不能改變運算符+用於兩個int型時的含義。
2.
運算符函數的參數至少有一個必須是類的對象或者類的對象的引用。這種規定可以防止程序員運用運算符改變內置類型的函義。
3.
重載不能改變運算符的優先順序。
4.
重載不能改變運算符的結合律。
5.
重載不能改變運算符操作數的個數。比如+需要兩個操作數,則重載的+也必須要有兩個操作數。
⑷ C語言函數重載問題
C語言沒有重載笑高頌函數!printf是C語言的函數
如果你是C++項目
那你直接寫函數就行了碰鄭
如果你念鉛也是先變長參數函數的話 那就編譯出錯唄!
⑸ C語言里的函數是否可以進行重載嗎
標准C, 不支持函數重載。
函數重載是C++的概念。 不光是類的成員函數, 一般函數以及模板函數都是可以重載的。
⑹ C語言可以重載嗎
不可以!!!重載是c++才有的
⑺ C語言支持函數重載嗎
C語言是不支持函數重載的,但是C++是可以的,這是C++對C的一個重要擴展。
⑻ C語言支持函數重載嗎
不支持,C裡面沒有重載這個概念。因為C不是面向對象的語言。