由c语言转向c++,我们需要做什么?
點(diǎn)擊上方藍(lán)字添加關(guān)注
在此送大家一份小禮物,公眾號內(nèi)回復(fù)linux0001即可獲得一本Linux電子教程
“c語言和c++到底有什么不同和聯(lián)系呢?”
毫無疑問,c語言和c++是兩種不同的語言,但是又有著千絲萬縷的聯(lián)系。語法上c語言與c++一脈相承,但是實(shí)際用起來效果或者程序結(jié)構(gòu)又完全不一樣,這讓我們產(chǎn)生了不小的疑惑,c和c++到底是什么關(guān)系呢?我們應(yīng)該怎樣去學(xué)習(xí)這兩種語言?
目錄
一、c語言和c++一脈相承
二、c++面向?qū)ο蟮膬?yōu)勢
三、一些建議
一、c語言和c++一脈相承
首先我們要明確,c語言和c++是有血緣關(guān)系的。這個(gè)我們可以追溯到早期,在早期c++是沒有自己的編譯器的,c++要通過編譯器編譯成c語言代碼,再由c語言編譯器編譯成機(jī)器代碼,隨著后來越來越重視面向?qū)ο蟮恼Z言的發(fā)展,c++也就擁有了自己的一套編譯體系。雖然在現(xiàn)在我們盡量把這兩種語言區(qū)別開,但是好像編譯器并不給面子,windows下的微軟編譯器(cl.exe),Linux下的G++編譯器,mac下的Clang編譯器都同時(shí)支持c和c++編譯,統(tǒng)稱為C/C++編譯器。編譯上的區(qū)別我們平時(shí)不容易察覺到,但是在實(shí)際程序編寫時(shí),我們會發(fā)現(xiàn)這兩種語言的基本語法完全一樣,c++完全可以使用c語言的數(shù)據(jù)類型,沒錯(cuò),使用c語言的方式去寫c++完全沒問題,但是我們不能完全這樣做,具體原因我將在下文介紹。
其次我們要知道,c++是作為c語言的一個(gè)拓展存在的。在科技不斷發(fā)展的今天,c語言已經(jīng)不能夠完全滿足眾多項(xiàng)目的編程需要,所以科學(xué)家為了滿足生產(chǎn)力的需要,c++就應(yīng)運(yùn)而生了。我們在說這兩種語言的區(qū)別的時(shí)候,總會籠統(tǒng)的說一句c語言面向過程,c++面向?qū)ο?#xff0c;這是沒有錯(cuò)的。面向過程的意思就是要求我們?nèi)ビ没镜膸烊懸恍┕δ軄硗瓿晌覀兊捻?xiàng)目,面向?qū)ο蟮囊馑际俏覀內(nèi)ダ们拜吜艚o我們的財(cái)產(chǎn)(指各種各樣的庫),去完成程序的設(shè)計(jì)。其實(shí)面向?qū)ο蟛粌H僅是指我們會有豐富的庫,這些庫是基于編程語言的優(yōu)勢完成設(shè)計(jì)的,那么這樣的話,我們作為使用庫的程序員,同樣可以利用語言的優(yōu)勢去寫庫留給有需要的人去用,我覺得這才是面向?qū)ο笳Z言的核心。就c++來說,由于語言的本身的關(guān)系,不足以支持我們?nèi)懸恍┍容^高級的通用庫去完成功能。關(guān)于c++是怎么利用自身優(yōu)勢來完成庫的編寫,我將在下文介紹。
二、c++面向?qū)ο蟮膬?yōu)勢
上文我們留了兩個(gè)坑:我們怎樣利用c++的優(yōu)勢去完成代碼的編寫和我們?yōu)槭裁床荒芡耆凑誧語言的方式去寫c++代碼。How?and?Why?
我們首先來說c++的優(yōu)勢是什么。(本段的內(nèi)容截取自2月12號的推文《一個(gè)好的程序架構(gòu)應(yīng)該是什么樣的?》)
c++擁有封裝、繼承和多態(tài)三大特性。
1、封裝。封裝指的是我們可以在類中將我們不希望外界調(diào)用的函數(shù)或者成員變量設(shè)置成私有(private)或者保護(hù)(protected)成員的形式,而外界需要調(diào)用的設(shè)置成公共成員(public)的形式,這樣不僅保護(hù)了我們的函數(shù)不被改變,并且也告訴后來者不必去動(dòng)我的私有和保護(hù)成員的函數(shù)和變量。
2、繼承。繼承指的是一個(gè)類被定義了之后,可以去由其他有需要的類去繼承父類的成員公共或者受保護(hù)成員的變量和函數(shù),這樣使得我們很多函數(shù)和變量不必去重復(fù)定義,減少代碼量。
3、多態(tài)。多態(tài)指的是定義在父類內(nèi)的虛函數(shù),可以被子類重新定義,這個(gè)過程我們稱之為“重寫”,這樣做的好處是我們可以不必多次在每個(gè)文件中去定義邏輯相同的函數(shù),大大提高了函數(shù)的重用。
此外,c++還擁有獨(dú)特的命名空間這一概念。這個(gè)在解決變量命名重復(fù)方面起著很大的作用。
說完這三大特性,我想上面兩個(gè)問題也就解決了。由于c++擁有相對于c語言來說的三大特性提供能量,程序必然比啥都沒有的c語言簡潔許多。c++可以對c語言說:你有的我有,你沒有的我還有,氣不氣!
三、一些建議
此處是我在學(xué)習(xí)c語言和c++初期感到疑惑的一些問題,我把他分享給大家。
1、在學(xué)習(xí)c++之前我有必要學(xué)習(xí)c語言嗎?
一口吃不出個(gè)胖子,任何事情都要循序漸進(jìn)。在我來看,確實(shí)是有必要的,至少基本語法是要了解的。在學(xué)完c語言再去看c++的書你會發(fā)現(xiàn),有大概半本的內(nèi)容是你在學(xué)習(xí)c語言的時(shí)候?qū)W到的,這樣學(xué)起來相當(dāng)輕松。
2、我有c語言基礎(chǔ),那我該怎么學(xué)習(xí)c++呢?
在學(xué)習(xí)c++初期,大部分人犯了同一種錯(cuò)誤,就是真的把c++當(dāng)作c語言來學(xué),學(xué)來學(xué)去學(xué)到最后用c++寫出來的代碼還是和c語言一樣的結(jié)構(gòu)。顯然這樣學(xué)是不對的。學(xué)習(xí)c++我覺得切入點(diǎn)一定是從類切入,這樣你學(xué)一段時(shí)間就會發(fā)現(xiàn),c++和c語言完全不同。類可以說是c++的精髓,不妨在學(xué)習(xí)的時(shí)候貫穿始終。
3、我真的有必要學(xué)習(xí)c++嗎?
若是有時(shí)間我建議學(xué)一學(xué),畢竟技多不壓身,但是前提是不要丟了自己很了解的語言,因?yàn)槟强赡苁悄阒饕年嚨?#xff0c;這個(gè)頂多算加分項(xiàng)。你想想,自己寫的單片機(jī)串口程序,上傳到自己寫的上位機(jī),看著自己檢測到的數(shù)據(jù)編程一幅幅美妙的圖形,這是一個(gè)多么幸福的時(shí)刻。這段話不僅限送給糾結(jié)于學(xué)不學(xué)c++,其他的語言也一樣。
已經(jīng)看到這里啦!喜歡本文的小伙伴請點(diǎn)一下右下角的在看鼓勵(lì)一下作者吧~
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關(guān)注公眾號,后臺回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤鏈接。
歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~
嵌入式Linux
微信掃描二維碼,關(guān)注我的公眾號
總結(jié)
以上是生活随笔為你收集整理的由c语言转向c++,我们需要做什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32固件升级之 hypertrm(
- 下一篇: C/C++函数指针与指针函数