C 課程第五次部落格 多型

2022-05-25 05:15:09 字數 1747 閱讀 4740

目錄part2 多型實驗

part3 總結

多型是指同樣的訊息被不同型別的物件接收時導致不同的行為。在c++中,所謂資訊是指對類的成員函式的呼叫,不同的行為是指不同的實現,也就是呼叫了不同的函式。

1)多型的型別

分為四類:過載多型,強制多型,包含多型和引數多型。前兩者為專用多型,而後者稱為通用多型。

2)多型的實現

分為兩類:編譯時的多型和執行時的多型。

前者是在編譯的過程中確定了同名操作的具體操作物件

後者則是在程式執行過程中才多型確定操作所針對的具體物件

這種確定操作的具體物件的過程就是繫結,繫結是指電腦程式自身彼此關聯的過程,也就是把一條資訊和乙個物件相結合的過程。繫結工作在編譯連線階段完成的情況稱為靜態繫結,例如過載,強制和引數多型。而繫結工作在程式執行階段完成的情況稱為動態繫結,例如多型操作物件的確定通過動態繫結完成。

在多型性中,運算子過載、虛函式、純虛函式和抽象類是相對來說難以理解的,下面我們主要將對這些知識點,設計實驗並探索。

運算子過載

第一注意點

當運算子過載為類的成員函式時,函式的引數個數比原來的運算元個數要少乙個(後置「++」,「--」除外)

#include using namespace std;

class fun;

fun operator+(const fun &c1,const fun &c2)const; //當過載函式為過載函式時,傳進兩個無名物件

void displat()const;

};

結果編譯器直接報錯:overloaded 'operator+' must be a unary or binary operator (has 3 parameters)

當operator+改成只傳進乙個引數時,編譯通過。

原因:類的this指標所指的物件預設穿進去。

虛函式虛函式是動態繫結的基礎。虛函式必須是非靜態的成員函式。虛函式經過派生之後,在類族中就可以實現執行過程中的多型

第二注意點:

由成員函式來呼叫或者是通過指標、引用來訪問虛函式

#include using namespace std;

//類的宣告和實現

class base1;

void base1::display() const

純虛函式和抽象類

帶純虛函式的類是抽象類,抽象類宣告了乙個類族派生類的共同介面,而介面的完整實現,即純虛函式的函式體,要由派生類自己定義。

#include using namespace std;

class base1;

class base2:public base1;

void base2::display1()const{

cout<<"base2::display1"《報錯:out-of-line definition of 'display1' does not match any declaration in 'base2'

將display1修改為display編譯通過。

而且在程式中的虛函式並沒有用virtual關鍵字顯性宣告,二是編譯器通過派生類有著與抽象基類的純虛函式相同的名稱、引數以及返回值,來自動確定其為虛函式。

通過定義同一名稱操作,當面對不同資料時實現不同的功能。使程式的功能實現更加靈活。

第五次部落格

這次寫一寫 if 語句,寫 if 語句前要先介紹布林表示式,布林表示式的結果結果要麼為true 要麼為false,布林值通常用於記錄條件,經常用於 if 語句中 然後是 and 和 or,and 兩邊為真才為真,or是兩邊為假才為假,就比如這樣 1 2 and 2 3 true 1 2 and 2 ...

第五次部落格作業

軟體 程式 軟體工程 應該有同學知道 程式 資料結構 演算法 這句名言,但是在實際的學習中,也有不少人產生了疑問。每次當我們拿同學寫的程式看時,會覺得他們寫的好菜,寫的什麼東西,一點都看不懂,更別說修改維護了,我要刪掉重寫!這是每個人的第一反應。但是那個同學會嬉笑著說,這是我們班學霸寫的,就是我上次...

c 第五次實驗

一 問題及 檔名稱 railgun 作 者 尚文宇 完成日期 2016 年 5 月 4 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 陣列分離 程式輸出 略 問題分析 略 演算法設計 略 三 心得體會 陣列和迴圈與if的結合運用還是很有意思的 四 知識點總結 陣列的輸...