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