本篇文章為本人學(xué)習(xí)C++過程中記錄的學(xué)習(xí)筆記,看的是嗶站黑馬程序員的視頻,本人覺得講的非常棒,感興趣的可以看看,以下內(nèi)容歡迎大家閱讀和批評指正。
1、指針系列:
(1)① 常量指針 :const int *P; (const修飾指針)
特點:指針的指向可以更改,但是指向的值不可以更改。
② 指針常量 :int * const P; (const修飾常量)
特點:指針的指向不可以更改,但是指向的值可以更改。
③ const既修飾指針,又修飾常量的: const int * const p;
特點:指向的值都不能發(fā)生改變。
(2) this指針 :本質(zhì)是指針常量。
2、 靜態(tài)成員 :
(1)靜態(tài)成員變量 :所有對象共享這一樣的數(shù)據(jù)、類內(nèi)聲明,類外初始化;
(2)靜態(tài)成員函數(shù) :所有對象共享一個函數(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);
}
這個程序的執(zhí)行結(jié)果是:調(diào)用父類成員func()函數(shù)成功!
為了能夠輸出“調(diào)用子類成員func()函數(shù)成功! ”,解決辦法就是用虛函數(shù),在父類Father的func函數(shù)前加個virtual。
得注意以下幾點:①如果是這樣test(Father* f),指針和引用是一樣的; ②發(fā)生這種動態(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進行重寫實例化,不然也是抽象類。 也就是說,F(xiàn)ather s; 編譯會報錯。
和虛函數(shù)差不多,一般寫成純虛函數(shù)的都是為了不讓其代碼實現(xiàn),而是讓子類實現(xiàn)。
(4) 虛析構(gòu)和純虛析構(gòu) :(解決的同一個問題,方法不同)
多態(tài)在使用的時候,如果子類中有屬性開辟到了堆區(qū),那么父類指針在釋放空間時無法調(diào)用到子類的析構(gòu)代碼,應(yīng)該如何解決?
注:父類的指針在析構(gòu)的時候,不會調(diào)用子類的析構(gòu)函數(shù)。 導(dǎo)致,如果有子類堆區(qū)屬性,會出現(xiàn)內(nèi)存泄漏,也就是delete不了。
解決方法:在父類的析構(gòu)函數(shù)前加上virtual關(guān)鍵字即可。
如果采用的是純虛析構(gòu)的話,virtual ~Father()=0;但是,還得在類外初始化一下才行。 Father::~Father(){}
注:有了純虛析構(gòu)的類也是抽象類,無法實例化對象。
(5) 多態(tài)性:同一個操作可以是不同對象的行為 ;
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4341瀏覽量
62806 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70585 -
C++
+關(guān)注
關(guān)注
22文章
2113瀏覽量
73742 -
代碼
+關(guān)注
關(guān)注
30文章
4808瀏覽量
68814 -
編譯
+關(guān)注
關(guān)注
0文章
660瀏覽量
32928
發(fā)布評論請先 登錄
相關(guān)推薦
學(xué)習(xí)C++
C++筆記003:C++從一個小程序開始
學(xué)習(xí)c++的經(jīng)驗分享!
如何學(xué)習(xí)C++,如何學(xué)好C++
如何學(xué)習(xí)編程c++語言?
學(xué)習(xí)C++的方法以及C++的就業(yè)方向
在main文件中怎樣去使用C++呢
C和C++的學(xué)習(xí)過程總結(jié)
Linux C/C++ 學(xué)習(xí)路線
![Linux <b class='flag-5'>C</b>/<b class='flag-5'>C++</b> <b class='flag-5'>學(xué)習(xí)</b>路線](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
C語言和STM32學(xué)習(xí)的一些學(xué)習(xí)筆記
C++學(xué)習(xí)筆記之c++的基本認識
C++學(xué)習(xí)筆記之順序容器
C/C++語言學(xué)習(xí)大全套
![<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>語言<b class='flag-5'>學(xué)習(xí)</b>大全套](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論