C++基礎(chǔ)語法梳理:引用、封裝、繼承和多態(tài)
本期是C++基礎(chǔ)語法分享的第六節(jié),今天給大家來分享一下:
(1)引用;
(2)宏;
(3)成員初始化列表;
(4)封裝;
(5)繼承;
(6)多態(tài);

引用
左值引用
常規(guī)引用,一般表示對(duì)象的身份。
右值引用
右值引用就是必須綁定到右值(一個(gè)臨時(shí)對(duì)象、將要銷毀的對(duì)象)的引用,一般表示對(duì)象的值。
右值引用可實(shí)現(xiàn)轉(zhuǎn)移語義(Move Sementics)和精確傳遞(Perfect Forwarding),它的主要目的有兩個(gè)方面:
消除兩個(gè)對(duì)象交互時(shí)不必要的對(duì)象拷貝,節(jié)省運(yùn)算存儲(chǔ)資源,提高效率。
能夠更簡(jiǎn)潔明確地定義泛型函數(shù)。
引用折疊
X& &、X& &&、X&& &?可折疊成?X&
X&& &&?可折疊成?X&&
宏
宏定義可以實(shí)現(xiàn)類似于函數(shù)的功能,但是它終歸不是函數(shù),而宏定義中括弧中的“參數(shù)”也不是真的參數(shù),在宏展開的時(shí)候?qū)?“參數(shù)” 進(jìn)行的是一對(duì)一的替換。
成員初始化列表
好處
更高效:少了一次調(diào)用默認(rèn)構(gòu)造函數(shù)的過程。
有些場(chǎng)合必須要用初始化列表:
常量成員,因?yàn)槌A恐荒艹跏蓟荒苜x值,所以必須放在初始化列表里面
引用類型,引用必須在定義的時(shí)候初始化,并且不能重新賦值,所以也要寫在初始化列表里面
沒有默認(rèn)構(gòu)造函數(shù)的類類型,因?yàn)槭褂贸跏蓟斜砜梢圆槐卣{(diào)用默認(rèn)構(gòu)造函數(shù)來初始化
initializer_list 列表初始化
用花括號(hào)初始化器列表初始化一個(gè)對(duì)象,其中對(duì)應(yīng)構(gòu)造函數(shù)接受一個(gè)?std::initializer_list?參數(shù).
initializer_list 使用
面向?qū)ο?/h1>
面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-oriented programming,OOP)是種具有對(duì)象概念的程序編程典范,同時(shí)也是一種程序開發(fā)的抽象方針。

面向?qū)ο笕筇卣?—— 封裝、繼承、多態(tài)
封裝
把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。關(guān)鍵字:public, protected, private。不寫默認(rèn)為 private。
public?成員:可以被任意實(shí)體訪問
protected?成員:只允許被子類及本類的成員函數(shù)訪問
private?成員:只允許被本類的成員函數(shù)、友元類或友元函數(shù)訪問
繼承
基類(父類)——> 派生類(子類)
多態(tài)
多態(tài),即多種狀態(tài)(形態(tài))。簡(jiǎn)單來說,我們可以將多態(tài)定義為消息以多種形式顯示的能力。
多態(tài)是以封裝和繼承為基礎(chǔ)的。
C++ 多態(tài)分類及實(shí)現(xiàn):
重載多態(tài)(Ad-hoc Polymorphism,編譯期):函數(shù)重載、運(yùn)算符重載
子類型多態(tài)(Subtype Polymorphism,運(yùn)行期):虛函數(shù)
參數(shù)多態(tài)性(Parametric Polymorphism,編譯期):類模板、函數(shù)模板
強(qiáng)制多態(tài)(Coercion Polymorphism,編譯期/運(yùn)行期):基本類型轉(zhuǎn)換、自定義類型轉(zhuǎn)換
靜態(tài)多態(tài)(編譯期/早綁定)
函數(shù)重載
動(dòng)態(tài)多態(tài)(運(yùn)行期期/晚綁定)
虛函數(shù):用 virtual 修飾成員函數(shù),使其成為虛函數(shù)
動(dòng)態(tài)綁定:當(dāng)使用基類的引用或指針調(diào)用一個(gè)虛函數(shù)時(shí)將發(fā)生動(dòng)態(tài)綁定
注意:
可以將派生類的對(duì)象賦值給基類的指針或引用,反之不可
普通函數(shù)(非類成員函數(shù))不能是虛函數(shù)
靜態(tài)函數(shù)(static)不能是虛函數(shù)
構(gòu)造函數(shù)不能是虛函數(shù)(因?yàn)樵谡{(diào)用構(gòu)造函數(shù)時(shí),虛表指針并沒有在對(duì)象的內(nèi)存空間中,必須要構(gòu)造函數(shù)調(diào)用完成后才會(huì)形成虛表指針)
內(nèi)聯(lián)函數(shù)不能是表現(xiàn)多態(tài)性時(shí)的虛函數(shù)
動(dòng)態(tài)多態(tài)使用
今天的分享就到這里了,大家要好好學(xué)C++喲~
寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號(hào):C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
