父類 plane 兩個類: 乙個是標頭檔案 乙個是原始檔
#pragma once
#include
class plane
;
原始檔
#include
#include
//#include
using
namespace
std;
plane::plane() :name("f-22"), year(2010)
plane::plane(std::string name, int year) :name(name), year(year)
plane::~plane()
void plane::fly()
void plane::land()
void plane::printf()
子類 兩個檔案 標頭檔案 原始檔
#pragma once
#include
class jet : public plane
;
這裡繼承 使用: 來繼承
原始檔
#include
#include
using
namespace
std;
jet::jet()
jet::jet(std::string name, int year)
jet::~jet()
主類 main 呼叫
#include
#include
#include
#include
using
namespace
std;
void func()
void main()
列印結果 :
plane 無參(預設)的建構函式: 名字:f-22 生產年代:2010
jet 無參(預設)數的建構函式 名字: f-22 生產年代:2010
plane 的fly函式
jet 的析構函式
plane 的析構函式
請按任意鍵繼續. . .
上面 jet.fly() 呼叫的是父類的方法, 沒有在子類裡宣告任何方法
如果在子類 jet裡面定義和父類plane裡面相同的方法 那麼呼叫的時候就是子類的方法.重寫
如果已經重寫了 那麼
可以看到呼叫順序
建立的時候 先呼叫父類的建構函式 釋放時 先呼叫子類的析構函式
jet.plane :: fly();
這樣就呼叫了父類的函式.
//派生類賦給父類
plane *pl =
&jet//指標
pl->fly();
plane &p2 = jet;//物件
p2.fly();
過載和重寫
過載 引數不同函式名相同
重寫 都相同
class a
;class a1: public a
;class a2 : public a
;//多繼承的二義性 :只能顯示使用根屬性
//多繼承用逗號分隔
class b : public a1, public a2
;
呼叫:
b b;
//b:: name = "test";// 如果直接呼叫會報錯, 不知道使用的是a1還是a2的 name 這就是繼承的二義性
b.a1::name = "namea1"; //只能顯示呼叫
b.a2::name = "namea2";
如果想給父類的name賦值 ?
// virtual 虛繼承 : 解決路徑不明確的問題,使多個繼承的同名成員時候 只有乙份拷貝
兩個派生類
class a1:virtual
public a
;class a2 : virtual
public a
;
呼叫:
b
b; b
: name = "test";
// 如果直接呼叫 不知道使用的是a1還是a2的 name 繼承的二義性
b.a1
::name = "namea1";
//只能顯示呼叫
b.a2
::name = "namea2";
當乙個類派生自基類,該基類可以被繼承為 public、protected 或 private 幾種型別。繼承型別是通過上面講解的訪問修飾符 access-specifier 來指定的。
我們幾乎不使用 protected 或 private 繼承,通常使用 public 繼承。
詳細看這裡
//用父類的指標來new乙個子類的物件
plane *jet = new copter();
//呼叫了子類中的虛函式
jet->land();
//**
delete jet;
jet = nullptr; //這種情況存在記憶體洩漏的可能
結果呼叫了父類的析構函式 但是沒有呼叫子類的析構函式. 這個時怎麼解決.
解析: 父類加上virtual關鍵字,那麼子類裡面預設也是加上了virtual.
相似**參考
純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加」=0」
virtual
void funtion1()=0
實際就是定義個介面
參考資料
C 繼承 二義性 虛繼承
繼承 子類擁有父類所有的成員變數和函式 子類是一種特殊的父類 子類可以當做父類的物件使用 子類可以擁有父類沒有的方法和屬性。class parent class child public parent int main 繼承的訪問控制 c 中的繼承方式會影響子類對外訪問屬性 1 看呼叫語句,是在類的...
C 多繼承的二義性
單繼承 派生類只從乙個基類派生 多繼承 派生類從多個基類派生 多重派生 有乙個基類派生出多個不同的派生類 多層派生 派生類又作為基類,繼續派生出新的類 多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 c...
C 多繼承的二義性
多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...