1、static關(guān)鍵字在c語言和C++語言中各自有哪些不同用法?
解析:C++兼容C語言中對于static的定義;C++中多了對于面向?qū)ο筇匦韵嚓P(guān)的引用。
c語言中的作用:1)修飾變量;2)修飾函數(shù)。
1)修飾變量:a.修飾全局變量,改變?nèi)肿兞康淖饔糜?,使其僅在聲明文件中可見,對其他文件不可見,限制其使用范圍;b.修飾局部變量,延長變量的聲明周期,作用域不變,普通局部變量隨著作用域結(jié)束,釋放其棧上內(nèi)存,用static修飾后,其內(nèi)存將在程序結(jié)束才進行釋放。
2)修飾函數(shù):和全局變量一樣,改變了函數(shù)被調(diào)用的范圍。
C++中的作用:被static修飾的變量/函數(shù),表示其屬于這個類,但是不屬于任一個特定的對象。
1)靜態(tài)數(shù)據(jù)成員,必須在類外進行初始化,因其不屬于任何一個對象;
2)靜態(tài)成員函數(shù):本身只能訪問靜態(tài)變量,不可以訪問其他非靜態(tài)成員變量。
2、面向?qū)ο笥心男┗咎匦裕?/p>
解析:面向?qū)ο蠡靖拍睿侯?,對象,繼承;基本特征:封裝、繼承、多態(tài)。
1)封裝:【定義】數(shù)據(jù)和代碼捆綁在一起,避免外界干擾和不確定性訪問;【引申】注意與組合的區(qū)分,封裝指一個類內(nèi)數(shù)據(jù)方法獨立,對外開放限制;組合指不同對象之間包含關(guān)系。
2)繼承:【定義】讓某種類型對象獲得另一個類型對象的屬性和方法;
【功能】可以使用現(xiàn)有類,并在無需重新編寫原有類的情況下對這些功能進行擴展;
【方式】實現(xiàn)繼承(使用基類屬性和方法,無需額外編碼);接口繼承(使用基類的屬性和方法名稱,但子類必須提供實現(xiàn)),可視繼承(子窗體/類使用基窗體/類的外觀和實現(xiàn)代碼能力)。
3)多態(tài):【定義】同一事物表現(xiàn)出不同事物的能力,即向不同對象發(fā)送同一消息,不同的對象在接收時候會產(chǎn)生不同的行為。
【引申】:重載是不是多態(tài)?重載是一個類內(nèi)的不同方法,不屬于繼承??梢哉J為是廣義多態(tài),理解為編譯時候的靜態(tài)多態(tài),也可以認為其不是對象間調(diào)用形成,可以認為不是多態(tài),只有重寫才算多態(tài)。沒有明確定義。
【功能】多態(tài)性允許將父對象設(shè)置成為和一個更多的他的子對象相等的技術(shù),賦值后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性調(diào)用不同的方式運作。也即接口重用。
【簡單概括】允許將子類類型的指針賦值給父類類型的指針。
3、虛函數(shù)相關(guān)介紹
1)繼承層次中,基類析構(gòu)函數(shù)為虛函數(shù):針對多態(tài)屬性,當(dāng)單基類指針實際所指對象為繼承類對象,如果析構(gòu)函數(shù)不為虛函數(shù),當(dāng)釋放該對象內(nèi)存時候,將只調(diào)用基類析構(gòu)函數(shù),使得繼承類對象的自有數(shù)據(jù)無法釋放,造成內(nèi)存泄漏問題;因此,需要將基類析構(gòu)函數(shù)定義為虛函數(shù);釋放該類對象內(nèi)存時候,先調(diào)用繼承類析構(gòu)函數(shù),然后在調(diào)用基類析構(gòu)函數(shù)。
2)構(gòu)造函數(shù)不能為虛函數(shù):a.構(gòu)造一個對象時候,必須知道對象的實際類型,而虛函數(shù)是在運行期間確定實際類型的。所以,如果構(gòu)造函數(shù)為虛函數(shù),則構(gòu)造一個對象時候,由于對象未構(gòu)造成功,編譯器不知道實際對象的類型,無法確定。b.虛函數(shù)實現(xiàn)依賴虛函數(shù)表,而虛函數(shù)表的指針vptr是在構(gòu)造函數(shù)中初始化的,所以如果構(gòu)造函數(shù)為虛函數(shù),虛函數(shù)表沒被初始化,無法進行。
3)虛函數(shù)運行代價:每個虛函數(shù)的對象需要維護一個虛函數(shù)表(通過虛指針指向這個虛函數(shù)表),因此在使用虛函數(shù)的時候都會產(chǎn)生一定的系統(tǒng)開銷。
4)inline/static/constructor這三種函數(shù)不能為虛函數(shù):inline是編譯時展開,必須有實體;static屬于class自己的類相關(guān),必須有實體,而且沒有this指針,無法調(diào)用虛函數(shù);constructor參見2)。
4、幾種繼承方式
解析:1)public繼承:派生類對象可以訪問基類中的公有成員,派生類成員函數(shù)可以訪問基類中的公有和受保護成員;
2)private繼承:基類的成員只能被直接派生類的成員訪問,無法再往下繼承;
3)protected繼承:基類的成員也只被直接派生類的成員訪問,無法再往下繼承;
4)虛繼承:為了解決多繼承時的命名沖突和冗余數(shù)據(jù)問題;虛繼承目的是為了讓某個類做出聲明,承諾愿意共享它的基類;典型代表為:C++標(biāo)準(zhǔn)庫中的iostream類。
使用多繼承經(jīng)常出現(xiàn)二義性,必須十分小心,一般只有比較簡單和不易出現(xiàn)二義性或者實在需要時候使用多繼承,能用單一繼承的就不用多繼承。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:C++知識問答2-創(chuàng)新互聯(lián)
路徑分享:http://chinadenli.net/article2/epsic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站導(dǎo)航、標(biāo)簽優(yōu)化、品牌網(wǎng)站設(shè)計、網(wǎng)站維護、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容