日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

孙鑫C++课程笔记2——创建类

發(fā)布時(shí)間:2024/1/1 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 孙鑫C++课程笔记2——创建类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Lesson 2
一、結(jié)構(gòu)體與類(lèi)型的區(qū)別:
與C語(yǔ)言不同的是,在C++中的結(jié)構(gòu)體允許擁有函數(shù)成員,這和類(lèi)有很大的相似性,二者的主要差別在于成員的訪問(wèn)權(quán)限上:
*缺省狀態(tài)下,結(jié)構(gòu)體的成員一律默認(rèn)為是Public的,可以在外部訪問(wèn),當(dāng)然也可以將這些成員聲明成Private的。
*缺省狀態(tài)下,類(lèi)的成員一律默認(rèn)為是Private的。

二、父類(lèi)與子類(lèi)的成員訪問(wèn)規(guī)則:

三、虛函數(shù)的概念
聲明方式:在函數(shù)頭前面加上關(guān)鍵字virtual : virtual void FunName(int ,int);
虛函數(shù)的引入是為了C++多態(tài) 的特性,一般的使用場(chǎng)景為:如果你聲明了一個(gè)父類(lèi)的指針指向一個(gè)子類(lèi)的對(duì)象,利用該指針進(jìn)行函數(shù)調(diào)用,那么,當(dāng)你調(diào)用的函數(shù)在父類(lèi)中聲明是虛函數(shù)時(shí),C++會(huì)采用遲綁定策略(late binding),根據(jù)指針指向的具體對(duì)象類(lèi)型判斷需要調(diào)用那個(gè)函數(shù),如果子類(lèi)中有這個(gè)函數(shù),則執(zhí)行子類(lèi)的函數(shù)定義,如果沒(méi)有,則執(zhí)行這個(gè)父類(lèi)的虛函數(shù)調(diào)用。
虛函數(shù)的實(shí)現(xiàn)實(shí)際上使用了一個(gè)虛函數(shù)表的概念,這個(gè)虛函數(shù)表解決了繼承和覆蓋的問(wèn)題,一個(gè)類(lèi)如果有虛函數(shù)的的時(shí)候,在創(chuàng)建一個(gè)這個(gè)類(lèi)的對(duì)象時(shí),該對(duì)象最前面的存儲(chǔ)空間位置會(huì)維護(hù)一個(gè)虛函數(shù)表,里面存放的是這個(gè)類(lèi)所有的虛函數(shù),存放順序按照函數(shù)聲明的先后順序,而且首先存放父類(lèi)的虛函數(shù),其次是子類(lèi)的,除非有覆蓋的情況發(fā)生。

純虛函數(shù)指的是沒(méi)有函數(shù)實(shí)現(xiàn),只有函數(shù)聲明的虛函數(shù),聲明方式為:
virtual void FunName()=0;
純虛函數(shù)是不能調(diào)用的,除非給了他的實(shí)現(xiàn)。例如,在父類(lèi)定義了一個(gè)純虛函數(shù),繼承的子類(lèi)給出了這個(gè)函數(shù)的實(shí)現(xiàn),那么這個(gè)子類(lèi)的對(duì)象就可以調(diào)用它,純虛函數(shù)往往用在設(shè)計(jì)父類(lèi)時(shí),不確定會(huì)不會(huì)在以后建立的派生類(lèi)中用得到某些函數(shù),可以先在父類(lèi)中給出這個(gè)純虛函數(shù)的聲明。
另外,當(dāng)子類(lèi)去繼承父類(lèi)的虛函數(shù)的時(shí)候,子類(lèi)的這個(gè)函數(shù)同樣是一個(gè)虛函數(shù),
不管有沒(méi)有在其前加上virtual關(guān)鍵字。在這種情況下,子類(lèi)函數(shù)會(huì)覆蓋父類(lèi)的函數(shù),在虛函數(shù)表上的表現(xiàn)就是:在這個(gè)子類(lèi)的對(duì)象最開(kāi)始的存儲(chǔ)空間上,子類(lèi)的虛函數(shù)代替了父類(lèi)的虛函數(shù)的位置,這樣如果你調(diào)用一個(gè)子類(lèi)對(duì)象的虛函數(shù),父類(lèi)的這個(gè)函數(shù)就不會(huì)產(chǎn)生影響。

四,引用
定義一個(gè)變量的引用,實(shí)際上是給這個(gè)變量一個(gè)別名定義方式為:
int a=0;
int &b=a;
上面就定義了一個(gè)變量a的別名,a和b指向同一個(gè)內(nèi)存空間,改變a的同時(shí)也會(huì)改變a;引用變量必須在定義時(shí)初始化。引用和指針在內(nèi)存空間上的區(qū)別:

引用與指針在使用上的區(qū)別在于,是代碼更具有邏輯性,例如,我們分別用引用和指針作為參數(shù)實(shí)現(xiàn)一個(gè)操作符“=”的重載函數(shù):
指針版本:ClassName operator =(ClassName * another);
引用版本:ClassName operator =(ClassName & another);
那么在調(diào)用的時(shí)候,二者的形式分別為:
指針版本: ClassName a;
ClassName b;
a=&b
引用版本: ClassName a;
ClassName b;
a=b;
顯然,傳遞引用更具有邏輯性;二者還具有其他形式的區(qū)別,簡(jiǎn)單表示為:
指針:變量,獨(dú)立,可變,可空,替身,無(wú)類(lèi)型檢查;
引用:別名,依賴,不變,非空,本體,有類(lèi)型檢查;

五,為什么包含自定義的頭文件用雙引號(hào),包含系統(tǒng)頭文件要用尖括號(hào)?
二者的主要區(qū)別在于搜尋文件路徑的起點(diǎn)上面;如果頭文件使用雙引號(hào)包含的,則從該項(xiàng)目(工程)的當(dāng)前目錄下開(kāi)始查找,如果使用的是尖括號(hào),則從系統(tǒng)目錄下開(kāi)始查找。其實(shí)可以統(tǒng)一用雙引號(hào),這樣的話,會(huì)先從當(dāng)前目錄下查找,如果沒(méi)有找到,則去系統(tǒng)目錄下查找。

六、使用命令代碼塊:

ifndefine abcdefg; //這只是隨便定義一個(gè)宏,不代表要使用它,與# define

define abcdefg 1; // # define abcdefg;等效

endif

在頭文件中,來(lái)防止頭文件被重復(fù)包含。

七、VC++程序編譯鏈接原理與過(guò)程

總結(jié)

以上是生活随笔為你收集整理的孙鑫C++课程笔记2——创建类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。