本篇文章為本人學(xué)習(xí)C++過程中記錄的學(xué)習(xí)筆記,看的是嗶站黑馬程序員的視頻,本人覺得講的非常棒,感興趣的可以看看,以下內(nèi)容歡迎大家閱讀和批評指正。
1、指針系列:
(1)① 常量指針 :const int *P; (const修飾指針)
特點(diǎn):指針的指向可以更改,但是指向的值不可以更改。
② 指針常量 :int * const P; (const修飾常量)
特點(diǎn):指針的指向不可以更改,但是指向的值可以更改。
③ const既修飾指針,又修飾常量的: const int * const p;
特點(diǎn):指向的值都不能發(fā)生改變。
(2) this指針 :本質(zhì)是指針常量。
2、 靜態(tài)成員 :
(1)靜態(tài)成員變量 :所有對象共享這一樣的數(shù)據(jù)、類內(nèi)聲明,類外初始化;
(2)靜態(tài)成員函數(shù) :所有對象共享一個(gè)函數(shù)、靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量。
3、多態(tài):
看如下代碼:
#include
using namespace std;
class Father
{
public:
void func()
{
cout << "調(diào)用父類成員func()函數(shù)成功!" << endl;
}
};
class Son:public Father
{
public:
void func()
{
cout << "調(diào)用子類成員func()函數(shù)成功!" << endl;
}
};
void test(Father& f)
{
f.func();
}
int main()
{
Son s1;
test(s1);
}
這個(gè)程序的執(zhí)行結(jié)果是:調(diào)用父類成員func()函數(shù)成功!
為了能夠輸出“調(diào)用子類成員func()函數(shù)成功! ”,解決辦法就是用虛函數(shù),在父類Father的func函數(shù)前加個(gè)virtual。
得注意以下幾點(diǎn):①如果是這樣test(Father* f),指針和引用是一樣的; ②發(fā)生這種動(dòng)態(tài)多態(tài),必須得有繼承關(guān)系; ③子類重寫父類的虛函數(shù),子類加不加virtual都可以( 一般不加,好區(qū)分 )。
(1) 純虛函數(shù)與抽象類 :
class Father
{
Public: virtual void func() = 0;
};
上述代碼中,函數(shù)func直接=0,表示純虛函數(shù),含有純虛函數(shù)的類教抽象類。 其派生類必須對函數(shù)func進(jìn)行重寫實(shí)例化,不然也是抽象類。 也就是說,F(xiàn)ather s; 編譯會(huì)報(bào)錯(cuò)。
和虛函數(shù)差不多,一般寫成純虛函數(shù)的都是為了不讓其代碼實(shí)現(xiàn),而是讓子類實(shí)現(xiàn)。
(4) 虛析構(gòu)和純虛析構(gòu) :(解決的同一個(gè)問題,方法不同)
多態(tài)在使用的時(shí)候,如果子類中有屬性開辟到了堆區(qū),那么父類指針在釋放空間時(shí)無法調(diào)用到子類的析構(gòu)代碼,應(yīng)該如何解決?
注:父類的指針在析構(gòu)的時(shí)候,不會(huì)調(diào)用子類的析構(gòu)函數(shù)。 導(dǎo)致,如果有子類堆區(qū)屬性,會(huì)出現(xiàn)內(nèi)存泄漏,也就是delete不了。
解決方法:在父類的析構(gòu)函數(shù)前加上virtual關(guān)鍵字即可。
如果采用的是純虛析構(gòu)的話,virtual ~Father()=0;但是,還得在類外初始化一下才行。 Father::~Father(){}
注:有了純虛析構(gòu)的類也是抽象類,無法實(shí)例化對象。
(5) 多態(tài)性:同一個(gè)操作可以是不同對象的行為 ;
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62720 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70580 -
C++
+關(guān)注
關(guān)注
22文章
2110瀏覽量
73691 -
代碼
+關(guān)注
關(guān)注
30文章
4796瀏覽量
68706 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32898
發(fā)布評論請先 登錄
相關(guān)推薦
評論