07 C 繼承和多型

2021-09-20 00:26:15 字數 4946 閱讀 1369

(建立於2017/12/25)

1.繼承的形式

#include //繼承

//**的重用性

using namespace std;

//人類

class human

protected:

char* name;

int age;

};//男人

class man : public human

private:

//兄弟

char* brother;

};void work(human& h)

void main()

輸出結果:

說話說話

說話請按任意鍵繼續. . .

2.向父類構造方法傳參

#include //繼承

//**的重用性

using namespace std;

class human

void say()

protected:

char* name;

int age;

};//男人

class man : public human

//泡妞

void chasing()

private:

//兄弟

char* brother;

human h;

};void main()

3.建構函式與析構函式呼叫的順序

#include //繼承

//**的重用性

using namespace std;

class human

~human()

void say()

protected:

char* name;

int age;

};//男人

class man : public human

~man()

//泡妞

void chasing()

private:

//兄弟

char* brother;

};void func()

void main()

輸出結果:

human 建構函式

man 建構函式

man 析構函式

human 析構函式

請按任意鍵繼續. . .

4.子類物件呼叫父類的成員

#include //繼承

//**的重用性

using namespace std;

class human

~human()

void say()

public:

char* name;

int age;

};//男人

class man : public human

~man()

//泡妞

void chasing()

void say()

private:

//兄弟

char* brother;

};void main()

5.多繼承

#include //繼承

//**的重用性

using namespace std;

class person;

//公民

class citizen;

//學生,既是人,又是公民

class student : public person, public citizen;

6.繼承的訪問修飾

#include //繼承

//**的重用性

using namespace std;

//繼承的訪問修飾

//基類中 繼承方式 子類中

//public & public繼承 = > public

//public & protected繼承 = > protected

//public & private繼承 = > private

////protected & public繼承 = > protected

//protected & protected繼承 = > protected

//protected & private繼承 = > private

////private & public繼承 = > 子類無權訪問

//private & protected繼承 = > 子類無權訪問

//private & private繼承 = > 子類無權訪問

//人類

class human

private:

char* name;

int age;

};//男人

class man : protected human

private:

//兄弟

char* brother;

};

7.繼承的二義性,指的是a和b同時繼承了c,c中有name屬性,那麼a和b都有了自己的name屬性,此時d同時繼承了a和b,那麼d中的name屬性究竟使用哪個?

#include //繼承

//**的重用性

using namespace std;

class a;

//虛函式(virtual function),虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類的版本。

//如果沒有這個virtual關鍵字,b.name = "aaa";會報錯,因為name屬性不明確

class a1 : virtual public a;

class a2 : virtual public a;

class b : public a1, public a2;

void main()

//使用了virtual關鍵字,使得呼叫的name屬性是子類重寫後的屬性,也就是呼叫的子類的,

//幾次賦值相當於都是給b中的name重新賦值,所以列印結果如下

輸出結果:

cccccc

ccc請按任意鍵繼續. . .

8.虛函式

//多型(程式的擴充套件性)

//動態多型:程式執行過程中,覺得哪乙個函式被呼叫(重寫)

//靜態多型:過載

//發生動態的條件:

//1.繼承

//2.父類的引用或者指標指向子類的物件

//3.函式的重寫

#include "plane.h"

#include "jet.h"

#include "copter.h"

//業務函式

void bizplay(plane& p)

void main()

jet.h

#pragma once

#include "plane.h"

//直公升飛機

class jet : public plane;

jet.cpp

#include "jet.h"

#include using namespace std;

void jet::fly()

void jet::land()

plane.h

#pragma once

//普通飛機

class plane;

plane.cpp

#include "plane.h"

#include using namespace std;

void plane::fly()

void plane::land()

copter.h

#pragma once

#include "plane.h"

//普通飛機

class copter : public plane;

copter.cpp

#include "copter.h"

#include using namespace std;

void copter::fly()

void copter::land()

9.純虛函式(抽象類)

//1.當乙個類具有乙個純虛函式,這個類就是抽象類

//2.抽象類不能例項化物件

//3.子類繼承抽象類,必須要實現純虛函式,如果沒有,子類也是抽象類

//抽象類的作用:為了繼承約束,根本不知道未來的實現

//形狀

class shape

};//圓

class circle : public shape

void sayarea()

private:

int r;

};void main()

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

//可以當做乙個介面

class drawble;

11.模板函式(泛型)

/*void myswap(int& a,int& b)

void myswap(char& a, char& b)

*///發現:這兩個函式業務邏輯一樣,資料型別不一樣

template void myswap(t& a, t& b)

void main()

07 C語言 常量

常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。常量可以是任何的基本資料型別,比如整數常量 浮點常量 字元常量,或字串字面值,也有列舉常量。常量就像是常規的變數,只不過常量的值在定義後不能進行修改。整數常量可以是十進位制 八進位制或十六進製制的常量。字首指定基數 0x 或 0x 表...

07 C語言記憶體分析

c語言記憶體分析 一 進製 概念 進製是一種計數方式,是數值的表現形式 4種主要的進製 十進位制 0 9 二進位制 0和1 八進位制 0 7 十六進製制 0 9 a b c d e f c語言在預設的情況下為十進位制。int num 1010 十進位制 int num 0b1100 二進位制,以0b...

學習筆記 07 C 基礎

學習c 之餘,繼續整理網路上搜尋到的資料 asp.net active server page 活動伺服器頁面 網路服務使用普遍存在的網路協議和資料格式,如http,xml進行通訊。支援這些網路標準的任何系統都支援網路服務。當網路服務和網路使用者依靠標準方式表示資料和命令 表示網路服務契約 算出網路...