www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > C語(yǔ)言與CPP編程
[導(dǎo)讀]1、簡(jiǎn)單聊一聊 ????今天為大家推薦一首陳同學(xué)版本的《離人》,這首歌曲也是很早之前朋友向我推薦的,目前也是在作者的音樂(lè)收藏夾中,經(jīng)常隨機(jī)播放到,大家有時(shí)間可以聽(tīng)一下! ????今天為大家?guī)?lái)重溫C++的第三篇文章,作者本次計(jì)劃連載大概5篇文章吧,雖然目前


1、簡(jiǎn)單聊一聊

    今天為大家推薦一首陳同學(xué)版本的《離人》,這首歌曲也是很早之前朋友向我推薦的,目前也是在作者的音樂(lè)收藏夾中,經(jīng)常隨機(jī)播放到,大家有時(shí)間可以聽(tīng)一下!

    今天為大家?guī)?lái)重溫C++第三篇文章,作者本次計(jì)劃連載大概5篇文章吧,雖然目前還有一些小伙伴沒(méi)有閱讀該連載文章,不過(guò)后續(xù)作者講解到C++方面一些有趣應(yīng)用的時(shí)候可以回頭看看這次連載文章,對(duì)于正在學(xué)習(xí)C++的小伙伴就需要更加好好練習(xí)了。好了,下面進(jìn)入今天的正題!

2、函數(shù)帶默認(rèn)參數(shù)

    函數(shù)帶默認(rèn)值算是C++里面一個(gè)比較容易理解的知識(shí),C語(yǔ)言中函數(shù)沒(méi)有這種使用方法,這里主要是為了后面的函數(shù)重載進(jìn)行鋪墊,所以這里作者簡(jiǎn)單溫習(xí)一下用法和注意事項(xiàng),函數(shù)帶默認(rèn)參數(shù)主要是說(shuō)函數(shù)在定義或者聲明的時(shí)候可以為函數(shù)形參指定默認(rèn)的參數(shù),后續(xù)使用可以不用傳入相對(duì)應(yīng)的參數(shù)使用缺省值即可,參考如下代碼:

 1#include <iostream>
2using namespace std;
3/******************************************
4 * Fuction: Printf1 
5 * Author : (公眾號(hào):最后一個(gè)bug)
6 *****************************************/

7int Printf1(int a = 1 ,int b = 2)
8{
9    cout<<"Printf1 : a = "<<a<<";b = "<<b<<endl;    
10}
11
12int Printf2(int a = 1 ,int b = 2); 
13int Printf3(int a ,int b = 2); 
14/******************************************
15 * Fuction: 測(cè)試函數(shù)默認(rèn)值 
16 * Author : (公眾號(hào):最后一個(gè)bug)
17 *****************************************/

18int main(int argc, char** argv) {
19
20    cout<<"Test:函數(shù)默認(rèn)值 "<<endl;  
21    cout<<"----------------- "<<endl;   
22    //Printf1
23    Printf1();
24    Printf1(4);
25    Printf1(4,5);
26    //Printf2
27    cout<<"----------------- "<<endl;   
28    Printf2();
29    Printf2(4);
30    Printf2(4,5);
31    //Printf3
32    cout<<"----------------- "<<endl;   
33    //Printf3(); 需要傳遞第一個(gè)參數(shù) 
34    Printf3(4);
35    Printf3(4,5);
36    cout<<"--公眾號(hào):最后一個(gè)bug--"<<endl;  
37    return 0;
38}
39
40/******************************************
41 * Fuction: Printf2 
42 * Author : (公眾號(hào):最后一個(gè)bug)
43 *****************************************/

44int Printf2(int a,int b)
45{
46    cout<<"Printf2 : a = "<<a<<";b = "<<b<<endl;    
47}
48/******************************************
49 * Fuction: Printf3
50 * Author : (公眾號(hào):最后一個(gè)bug)
51 *****************************************/

52int Printf3(int a,int b)
53{
54    cout<<"Printf3 : a = "<<a<<";b = "<<b<<endl;    
55}

    其輸出結(jié)果如下:

    解析一下:作者定義了三種函數(shù)帶默認(rèn)參數(shù)的形式,Printf1是直接在定義確定參數(shù)缺省值;Printf2是在函數(shù)聲明處提供缺省值;Printf3只提供部分參數(shù)缺省值,具體使用情況參考上面的代碼。

    注意事項(xiàng):

    1)函數(shù)參數(shù)自左向右從第一提供缺省值的參數(shù)開(kāi)始往右的參數(shù)都需要提供缺省參數(shù);

    2)雖然缺省參數(shù)能夠放在定義或者聲明,盡量放在聲明,如果放在定義處,定義之前均無(wú)法提供缺省參數(shù),會(huì)存在編譯不通過(guò)的情況。

      3)由于提供了缺省值,對(duì)于程序的編碼也會(huì)變得更加簡(jiǎn)潔,不過(guò)注意其實(shí)際調(diào)用函數(shù)所傳入的實(shí)參都是從左向右,且不會(huì)跳躍。


3、函數(shù)重載

    重載簡(jiǎn)單一點(diǎn)說(shuō)就是同一句話(huà)在不同的語(yǔ)境中表達(dá)著不同的意思,比如說(shuō)在C語(yǔ)言中一般都不允許有同名的全局函數(shù)出現(xiàn),而在C++中可以根據(jù)函數(shù)的參數(shù)不同而存在相同名字的函數(shù),這就是函數(shù)重載。下面作者簡(jiǎn)單的寫(xiě)個(gè)小代碼,供大家參考:

 1#include <iostream>
2using namespace std;
3
4int Fuction(int a,int b);
5int Fuction(int a,int b,int c);
6float Fuction(float a,float b);
7/******************************************
8 * Fuction: 測(cè)試函數(shù)重載 
9 * Author : (公眾號(hào):最后一個(gè)bug)
10 *****************************************/

11int main(int argc, char** argv) {
12
13    cout<<"Test:函數(shù)重載"<<endl;    
14    cout<<"result1:  "<<Fuction(1,1)<<endl;
15    cout<<"result2:  "<<Fuction(1,1,1)<<endl;
16    cout<<"result3:  "<<Fuction((float)2.0,(float)5.0)<<endl;
17    cout<<"--公眾號(hào):最后一個(gè)bug--"<<endl;  
18    return 0;
19}
20int Fuction(int a,int b)
21{
22    return (a + b); 
23
24int Fuction(int a,int b,int c)
25{
26    return (a + b + c); 
27
28float Fuction(float a,float b)
29{
30    return (a * b); 
31}

    輸出結(jié)果如下:

    解析一下:通過(guò)上面的程序我們大體可以知道,我們通過(guò)函數(shù)參數(shù)的差異調(diào)用相同的函數(shù)名會(huì)最終調(diào)用不同的函數(shù)實(shí)現(xiàn)。這種方式就非常符合我們現(xiàn)實(shí)的生活,比如用錄音機(jī)播放音樂(lè),通過(guò)放置不同的磁帶就可以播放不同的音樂(lè)了,所以說(shuō)C++語(yǔ)言的特性更加符合人類(lèi)的思維。

    注意事項(xiàng):

    1)函數(shù)重載時(shí)函數(shù)名稱(chēng)必須相同,其形參存在差異,比如:參數(shù)的類(lèi)型,參數(shù)的個(gè)數(shù),參數(shù)的順序。

      2)單獨(dú)的函數(shù)返回值不同不能作為重載的依據(jù)。

      3)其實(shí)函數(shù)重載僅僅只是名稱(chēng)相同,他們本質(zhì)屬于不同的函數(shù),在編譯階段編譯器能夠通過(guò)函數(shù)的參數(shù)不同來(lái)進(jìn)行編譯處理,同時(shí)也增加代碼了代碼的可讀性,如果無(wú)法通過(guò)名字的參數(shù)進(jìn)行區(qū)分或者存在二義性,那么會(huì)導(dǎo)致編譯錯(cuò)誤 : 比如我們前面函數(shù)默認(rèn)值的處理,如果一個(gè)函數(shù)的參數(shù)與另外一個(gè)函數(shù)的前面參數(shù)完全一直,而另一個(gè)函數(shù)其余參數(shù)都含有默認(rèn)值,這樣就存在二義性,編譯無(wú)法通過(guò)。

    

4、運(yùn)算符重載

    重載一般分為函數(shù)重載運(yùn)算符重載,在我們C語(yǔ)言中,對(duì)于結(jié)構(gòu)體這樣的打包變量是不支持運(yùn)算符直接進(jìn)行運(yùn)算的,一般對(duì)于結(jié)構(gòu)體的運(yùn)算我們大多采用函數(shù)的形式進(jìn)行處理,然后返回最后的結(jié)構(gòu)體。

    如果我們用更加統(tǒng)一的眼光看待的C的話(huà),認(rèn)為它僅僅只能支持基本數(shù)據(jù)類(lèi)型的運(yùn)算符重載。而C++語(yǔ)言可以重新定義這種的運(yùn)算符(如“+”等)來(lái)滿(mǎn)足我們的需求,下面作者給一個(gè)簡(jiǎn)單的小程序供大家參考:

 1#include <iostream>
2using namespace std;
3
4class Test
5
{
6private:
7    int a;
8    int b;
9
10public:
11    Test(int param1,int param2);
12    void Printf(void); 
13    friend Test operator+(Test A,Test B); //必須定義為友元 
14};
15/************************************
16 * Fuction :析構(gòu)函數(shù) 
17 * Author  :(公眾號(hào):最后一個(gè)bug) 
18 ************************************/

19Test::Test(int param1,int param2)
20{
21    a = param1;
22    b = param2;
23}
24/************************************
25 * Fuction :Printf 
26 * Author  :(公眾號(hào):最后一個(gè)bug) 
27 ************************************/

28void Test::Printf(void)
29{
30    cout<<"a = "<<a<<",b = "<<b<<endl; 
31
32}
33/************************************
34 * Fuction :重載加法運(yùn)算符 
35 * Author  :(公眾號(hào):最后一個(gè)bug) 
36 ************************************/

37Test operator+(Test A,Test B)
38{
39    Test Ret(0,0); 
40
41    Ret.a = A.a + B.a;
42    Ret.b = A.b + B.b;
43
44    return Ret;
45}
46
47int main(int argc, char** argv) {
48    Test stTest1(1,2);
49    Test stTest2(1,2);
50    Test stTest3(0,0);
51
52    stTest3 = stTest1 + stTest2; //直接可以進(jìn)行加法運(yùn)算 
53    stTest3.Printf();
54    cout<<"公眾號(hào):最后一個(gè)bug"<<endl; 
55    return 0;
56}

    最后的輸出結(jié)果我就不貼圖了a = 2,b = 4;

    解析一下 :

    1)其實(shí)運(yùn)算符重載你可以簡(jiǎn)單的認(rèn)為就是把運(yùn)算符操作用operator關(guān)鍵字定義的對(duì)應(yīng)函數(shù)來(lái)進(jìn)行調(diào)用處理即可。其實(shí)和我們平時(shí)在C語(yǔ)言定義函數(shù)來(lái)進(jìn)行結(jié)構(gòu)體加法運(yùn)算是一樣的道理。

    2)在13行我們使用了friend關(guān)鍵字來(lái)進(jìn)行修飾,為了讓operator定義的函數(shù)內(nèi)部能夠訪(fǎng)問(wèn)Test類(lèi)的內(nèi)部私有成員,強(qiáng)調(diào)一點(diǎn)的是operator定義的函數(shù)不屬于類(lèi)Test,如果operator函數(shù)內(nèi)部訪(fǎng)問(wèn)其Test的私有成員屬于外部訪(fǎng)問(wèn),這樣是不允許的,所以我們使用了friend來(lái)為其開(kāi)放訪(fǎng)問(wèn)權(quán)限;如果我們不想直接訪(fǎng)問(wèn)類(lèi)Test內(nèi)的私有成員,我們可以在public里面為其開(kāi)放對(duì)應(yīng)接口,然后在operator函數(shù)中進(jìn)行調(diào)用即可。

    3)談到第二點(diǎn)可能很多小伙伴會(huì)問(wèn)為什么不把重載函數(shù)放到類(lèi)里面來(lái)實(shí)現(xiàn),這樣不就可以訪(fǎng)問(wèn)其類(lèi)的私有變量了嗎?就可以省略friend關(guān)鍵字了!確實(shí),大家可以編碼進(jìn)行實(shí)現(xiàn),這樣有一點(diǎn)我們得修改類(lèi),如果采用我們現(xiàn)在的全局方式通過(guò)調(diào)用類(lèi)的public接口會(huì)更加靈活一點(diǎn)。

    4)這樣看來(lái)我們?nèi)绻€有其他的類(lèi)要實(shí)現(xiàn)+法運(yùn)算,同樣需要用operator來(lái)進(jìn)行定義,同一個(gè)+法運(yùn)算就有多種用法了,所以叫運(yùn)算符重載!


5、最后小結(jié)

    對(duì)于運(yùn)算符的重載,作者僅僅舉例了+法運(yùn)算,還有"=,++,&&"等等,哪些運(yùn)算符可以重載,怎么重載,還有一些注意事項(xiàng),可能需要大家查找相關(guān)書(shū)籍或者文檔進(jìn)行學(xué)習(xí),基本上大同小異,都是一些語(yǔ)法問(wèn)題,大家依葫蘆畫(huà)瓢+死記硬背基本上可以搞定,其實(shí)在真正開(kāi)發(fā)的過(guò)程中,一些冷門(mén)的語(yǔ)法是用得很少的,甚至基本上不會(huì)用,而我們學(xué)習(xí)主要是為了對(duì)這些語(yǔ)法不要太陌生,以后閱讀某某大佬或者項(xiàng)目的代碼遇到了可以回憶得起來(lái),然后好好查查資料,印象就特別深刻了!

    

最近文章推薦

const關(guān)鍵字應(yīng)用總結(jié)

Linux思維導(dǎo)圖整理(建議收藏)

C語(yǔ)言C++中assert的用法

字符串操作的全面總結(jié)

代碼防御性編程的十條技巧

 九種查找算法

  數(shù)據(jù)結(jié)構(gòu)之堆棧

 一文輕松理解內(nèi)存對(duì)齊

點(diǎn)【在看】是最大的支持 

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉