虛函式深入理解
純虛函式
小結過載和重寫有什麼區別?什麼時候是過載,什麼時候是重寫?
#include #include using namespace std;
class parent
int main(int argc, char *ar**)
virtual void func()
};
分析:這個類的設計完全脫離實際,沒有任何的意義!
#include #include using namespace std;
//圖形
class shape
};//矩形
class rectangle : public shape
double area()
};//圓
class circle : public shape
double area()
};//求圖形的面積
void area(shape* s)
area是純虛函式,= 0 告訴編譯器,這個函式故意只宣告不定義。
#include #include using namespace std;
//圖形
class shape;
//矩形
class rectangle : public shape
double area()
};//圓
class circle : public shape
double area()
};//求圖形的面積
void area(shape* s){ //可以定義抽象類的指標
cout << s->area() 《函式過載與函式重寫不同
多型是通過虛函式表實現的
虛函式在效率上會受到影響
抽象類可用於表示現實世界中的抽象概念
抽象類是通過純虛函式實現的
繼承與多型(下)
函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被覆蓋 過載是在編譯期間根據引數型別和個數決定呼叫函式 函式重寫 必須發生於父類與子類之間 並且父類與子類中的函式必須有完全相同的原型 使用 virtual 宣告之後能夠產生多型 多型是在執行期間根據具體物件的型別決定呼叫函式 c...
12 繼承與多型(下)
class parent 通過虛函式表指標vptr呼叫重寫函式是在程式執行時進行的,因此需要通過定址操作才能確 定 真正的應該呼叫的函式。而普通成員函式是在編譯時就確定了呼叫的函式。在效率上,虛函式 的效率 要低的多。注意 處於效率的考慮,沒有必要把所有的成員函式都宣告為虛函式。物件中vptr指標什...
繼承與多型
繼承 繼承是c 語言支援 重用及多型的重要機制。通過繼承,可以繼承可以在現有類的基礎上派生出新類,新類將共享現有類的成員,並且還可以新增新的成員。c 語言中,重用主要表現為可以使用現成的類 如.net框架類庫中的類 來定義新類,主要方法有組合和繼承兩種 繼承是物件導向程式設計支援 重用的另乙個重要機...