一、抽象類與動態型別轉換
1、訪問控制屬性
類的定義中有public、private和protected三個關鍵字,其中private關鍵字說明類中成員為私有成員,只能在類內的函式訪問;public成員為公有成員,可被任何其他類訪問,protected關鍵字是保護屬性,保護屬性的資料或函式可被派生類成員訪問。
class a
;class b : public a//公有繼承
};int main()
繼承分為公有繼承、私有繼承和保護繼承;
//基類
class a
{};//公有繼承
class b : public a
{};//私有繼承
class c : private a
{};//保護繼承
class d : protected a
{};
三種繼承的區別:
//公有繼承 物件訪問 成員訪問
public --> public y y
protected --> protected n y
private --> private n n
//保護繼承 物件訪問 成員訪問
public --> protected n y
protected --> protected n y
private --> protected n n
//私有繼承 物件訪問 成員訪問
public --> private n y
protected --> private n y
private --> private n n
2、抽象類與純虛函式
當類太抽象以至於無法例項化就叫做抽象類。抽象類不能例項化(建立物件)。
當基類中的函式要求子類實現它時,此函式叫做抽象函式或純虛函式。
//基類
class bike
;class mountainbike : public bike
};
包含純虛函式(抽象函式)的類叫做抽象類。上述例子中bike類為抽象類,不能例項化物件。
3、動態型別轉換
動態型別轉換使用:dynamic_cast運算子。
作用:a、沿繼承層級向上、向下及側向轉換到類的指標和引用。
轉指標失敗時返回nullptr,轉引用失敗則丟擲異常。
//基類
class bike
;class mountainbike : public bike
};class racingbike : public bike
};void print(bike &bike)
}
4、上轉和下轉
將派生型別指標賦值給基類型別指標為上轉;反之為下轉。
上轉可不使用dynamic_cast而隱式轉換;
下轉必須顯式執行。
上面的方法簡稱為:父上,子下;上轉隱,下轉顯。
之所以有上述規則,是因為可將派生類物件截斷,只使用繼承來的資訊,但不能將基類物件加長,無中生有變出派生類物件。
5、typeid(執行時查詢型別的資訊)
運算子typeid返回乙個type_info物件的引用,typeid(type).name()返回實現定義。
#include #include a a{};
auto& t = typeid(a);
if(typeid(a) == t)
C 繼承與多型(二)
多型 虛函式 類成員函式前面加virtual關鍵字 虛函式重寫 當在子類的定義了乙個與父類完全相同的虛函式時,則稱子類的這個函式重寫了這個父類的這個虛函式 滿足條件 1.虛函式的重寫 2.父類的指標 引用呼叫虛函式 多型跟型別無關,與物件有關 多型 當使用基類的指標或引用調重寫的虛函式時,當指向父類...
八 繼承多型
繼承的格式 public class 子類名extends 父類名 繼承的好處 a 提高了 的復用性 b 提高了 的維護性 c 讓類與類之間產生了關係,是多型的前提 繼承的弊端 讓類與類之間產生了關係,也就讓類的耦合性增強了。開發原則 高內聚,低耦合。內聚 就是自己完成某件事情的能力 耦合 類與類的...
C 繼承與多型
派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...