C 溫故 2 類的繼承(二)

2021-08-13 17:47:58 字數 884 閱讀 1958

當父類定義為虛函式後,子類同名函式也預設為虛函式

主要考慮普通虛函式和虛擬析構函式

#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 多型公有繼承

有時候希望同乙個方法在派生類和基類中的行為是不同的。換句話說,方法的行為取決於呼叫該方法的物件。這種較複雜的行為稱為多型 具有多種形態。即同一種方法其行為隨上下文而異。有兩種重要的機制可用於實現多型公有繼承 在派生類中重新定義基類的方法。使用虛方法。如果要在派生類中重新定義基類的方法,通常應將基類方...