當父類定義為虛函式後,子類同名函式也預設為虛函式
主要考慮普通虛函式和虛擬析構函式
#include "stdafx.h"
#include "iostream"
using
namespace
std;
class a
// 輸出
// a constructed
// b constructed
// b::func()
// b de-constructed
// a de-constructed
現在把 a 類的析構函式和 func 函式都變成非虛函式
~a()
{ cout << "a de-constructed"
void
func(){cout << "a::func()"
// a constructed
// b constructed
// a::func()
// a de-constructed
這裡的前提是:使用基類的指標(或引用)指向子類
由此給出兩條原則:
以圓和橢圓的類設計為例:似乎可以簡單的將圓作為橢圓的派生類,但這樣一來,從橢圓類繼承過來的很多變數和方法(長、短軸等)是沒有意義的
因此考慮抽象兩者的共性,將其組織為乙個基類,圓和橢圓均從該基類派生
// 純虛函式由 virtual、後面加 『=0』 組成
virtual
double area()const = 0;
C 溫故筆記(二)
一 多重繼承 1 多重繼承是從多於乙個直接基類派生類的能力,多重繼承的派生類繼承其所有父類的屬性。2 在多重繼承下,派生類的物件包含每個基類的物件。3 多重繼承 建構函式初始化式只能控制用於初始化基類的值,不能控制基類的構造次序。4 對於多重繼承,派生類的指標或引用可以轉換為其任意基類的指標或引用。...
C 溫故筆記(二)
一 多重繼承 1 多重繼承是從多於乙個直接基類派生類的能力,多重繼承的派生類繼承其所有父類的屬性。2 在多重繼承下,派生類的物件包含每個基類的物件。3 多重繼承 建構函式初始化式只能控制用於初始化基類的值,不能控制基類的構造次序。4 對於多重繼承,派生類的指標或引用可以轉換為其任意基類的指標或引用。...
C 類繼承2 多型公有繼承
有時候希望同乙個方法在派生類和基類中的行為是不同的。換句話說,方法的行為取決於呼叫該方法的物件。這種較複雜的行為稱為多型 具有多種形態。即同一種方法其行為隨上下文而異。有兩種重要的機制可用於實現多型公有繼承 在派生類中重新定義基類的方法。使用虛方法。如果要在派生類中重新定義基類的方法,通常應將基類方...