C語(yǔ)言中,結(jié)構(gòu)體能不能相加?
這個(gè)問(wèn)題乍一看好像很簡(jiǎn)單,但是仔細(xì)一想,好像又沒(méi)這么干過(guò)。
寫(xiě)個(gè)代碼試下:
#includestruct Test { int a; int b; }; int main() { struct Test t1; struct Test t2; t1 + t2; return 0; }
隨便來(lái)個(gè)結(jié)構(gòu)體,定義兩個(gè)結(jié)構(gòu)體變量,計(jì)算:
t1 + t2;
的值。
編譯代碼,很顯然,報(bào)錯(cuò)了:
root@turbo:~# gcc 1.c -o 1 1.c: In function ‘main’: 1.c:14:12: error: invalid operands to binary + (have ‘struct Test’ and ‘struct Test’) 14 | t1 + t2; | ^ root@turbo:~#
所以結(jié)論就是:
C語(yǔ)言中的結(jié)構(gòu)體不支持相加的操作。
原因也很簡(jiǎn)單,編譯器不知道相加的規(guī)則:到底是 a 跟 a 相加還是 a 跟 b 相加。
?
要解決這個(gè)問(wèn)題,可能只有函數(shù)能行。
#includestruct Test { int a; int b; }; struct Test func(struct Test t1, struct Test t2) { struct Test t; t.a = t1.a + t2.a; t.b = t1.b + t2.b; return t; } int main() { struct Test t1; struct Test t2; //t1 + t2; func(t1, t2); return 0; }
定義一個(gè)函數(shù),參數(shù)是兩個(gè)結(jié)構(gòu)體變量,函數(shù)體相當(dāng)于是你指定的規(guī)則,返回的結(jié)果也是一個(gè)結(jié)構(gòu)體。
不過(guò)這個(gè)問(wèn)題要是放在C++里面,那就真的不算問(wèn)題。
因?yàn)镃++有專(zhuān)門(mén)的機(jī)制來(lái)解決它,運(yùn)算符重載,本質(zhì)也是寫(xiě)個(gè)函數(shù)。
Test operator+(Test t1, Test t2) { Test t; t.a = t1.a + t2.a; t.b = t1.b + t2.b; return t; }函數(shù)名就叫:operator+。
operator是C++里面的關(guān)鍵字,專(zhuān)門(mén)用來(lái)給運(yùn)算符賦予第二個(gè)含義。
函數(shù)的參數(shù)和返回值都是相同類(lèi)型的結(jié)構(gòu)體,函數(shù)體跟我們剛才寫(xiě)的也一樣。
唯一不一樣的地方,就是調(diào)用函數(shù)的時(shí)候,既可以通過(guò)函數(shù)名的形式:
operator+(t1, t2);也可以直接寫(xiě)成:
t1 + t2;這種形式,看起來(lái)更加人性化。
編譯的時(shí)候選擇C++的編譯器g++,可以順利通過(guò):
root@turbo:~# g++ test.cpp -o test root@turbo:~#
當(dāng)然了,我們?cè)贑++里面寫(xiě)代碼,更多時(shí)候用的是class,成員變量給個(gè)私有屬性,因?yàn)橐诤瘮?shù)里面訪問(wèn)類(lèi)的私有成員變量,所以把它聲明成友元函數(shù),這樣看起來(lái)就順眼的多。
class Test { private: int a; int b; public: Test operator+(Test t) { Test tmp; tmp.a = this->a + t.a; tmp.b = this->b + t.b; return tmp; } };加法運(yùn)算符不僅能重載友元函數(shù),還能重載成成員函數(shù)。然后還會(huì)涉及構(gòu)造函數(shù)、析構(gòu)函數(shù)、this指針等等一大堆機(jī)制。所以,你覺(jué)得C語(yǔ)言和C++,哪個(gè)更復(fù)雜一些?
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136820 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73650 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49130 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10841
原文標(biāo)題:結(jié)構(gòu)體能不能相加?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論