(四)C 中的繼承 多型和模板函式

2021-09-14 08:31:52 字數 3517 閱讀 9737

二、多型

二、模板函式(泛型)

繼承可以更好的實現**的重用性

#include #include using namespace std;

//開發者

class developer

};//android開發者

class androiddeveloper : public developer

cout << "我使用" << this->ide << "開發了一款android應用,使用了" << this->language << "語言" << endl;

}private:

//android 版本

char* androidversion;

};//所有開發者都有開發工作

void work(developer& d)

void main()

父類的建構函式先呼叫;子類的析構函式先呼叫

//開發者

class developer

~developer()

void say()

};//android開發者

class androiddeveloper : public developer

~androiddeveloper()

cout << "我使用" << this->ide << "開發了一款android應用,使用了" << this->language << "語言" << endl;

}private:

//android 版本

char* androidversion;

};void work(developer& d)

//父類的建構函式先呼叫

//子類的析構函式先呼叫

void func()

void main()

輸出:

developer 建構函式

androiddeveloper 建構函式

我是開發者

我使用android studio開發了一款android應用,使用了kotlin語言

androiddeveloper 析構函式

developer 析構函式

基類中

繼承方式

子類中public

& public繼承

=> public

public

& protected繼承

=> protected

public

& private繼承

=> private

protected

& public繼承

=> protected

protected

& protected繼承

=> protected

protected

& private繼承

=> private

private

& public繼承

=> 子類無權訪問

private

& protected繼承

=> 子類無權訪問

private

& private繼承

=> 子類無權訪問

4.1 繼承的二義性定義

在某個類b同時繼承另乙個類a的兩個或多個子類時(a1和a2),通過類b訪問類a的成員時,會出現成員不明確的情況,即繼承的二義性

class a ;

class a1 : public a ;

class a2 : public a ;

class b : public a1, public a2 ;

void main()

4.2 繼承的二義性定**決方案

再遇到繼承的二義性時,可使用虛繼承來解決繼承的二義性問題

虛繼承:不同路徑繼承來的同名成員只有乙份拷貝

class a ;

class a1 : virtual public a ;

class a2 : virtual public a ;

class b : public a1, public a2 ;

void main()

virtual 關鍵字修飾的函式叫虛函式,用來實現多型

例如:plane.h

#pragma once

class plane ;

plane.cpp

#include "plane.h"

#include #include using namespace std;

void plane::fly()

void plane::land()

helicopter.h

#pragma once

#include "plane.h"

class helicopter : public plane ;

helicopter.cpp

#include "helicopter.h"

#include #include using namespace std;

void helicopter::fly()

void helicopter::land()

test.cpp

#include #include #include "plane.h"

#include "helicopter.h"

using namespace std;

//業務函式

void runplane(plane &p)

void main()

//形狀

class shape ;

//圓class circle : public shape

void sayarea()

};void main()

介面只是邏輯上的劃分,語法上跟抽象類的寫法沒有區別

//可以看作乙個介面

class drawable

為了繼承約束,子類必須按照約束實現

//可以看作乙個介面

class drawable

函式模板類似於泛型,用於在業務相同,引數型別不同時進行宣告,在使用過程中,根據實際型別進行推導

template //交換兩個變數的值

void swap(t& a, z& b)

void main()

繼承和多型的模板

1 繼承的時候要在父類的後面加上引數列表 2 父類建構函式有引數輸入的話,要在子類的建構函式後面新增初始化列表,同時加上父類名和引數列表 3 建立子類物件時,也要加上引數列表 4 子類可以有模板也可以沒有模板,沒有模板就得指定型別,後面建立物件時須得使用同樣的型別 include include u...

C 的中的繼承,多型和虛函式

首先繼承,多型,虛函式,我們先了解一下各位的關係。繼承是子類繼承父類,完成基礎功能的獲取,當然繼承有三種許可權,public,protect和private,如果不加許可權限定,預設繼承是私有繼承。許可權表如下 所以可以看到凡私有成員,子類都不能用,不過有方法能用,這裡不討論。多型 實際上就是通過繼...

C 中的繼承和多型

只允許單繼承,多繼承可以由介面來實現,繼承是可以傳遞的,類可以定義虛方法 虛屬性 虛索引指示器,而派生類能重寫這些成員,以事項物件導向程式設計中的多型 1.類的繼承 using system using system.collections.generic using system.linq usi...