多型性和虛函式

2021-10-01 17:27:17 字數 2184 閱讀 3251

目錄

什麼是多型性

乙個典型的例子

利用虛函式實現動態多型性

虛函式的作用

靜態關聯和動態關聯

什麼情況下應當宣告虛函式

虛析構函式

純虛函式與抽象類

純虛函式

抽象類乙個綜合的例子

向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為(即方法)

從系統實現的角度來看,總共分為兩類:靜態多型性動態多型性

靜態多型性:函式過載,運算子過載(實質上也是函式過載)

動態多型性:不在編譯時確定呼叫哪個函式,而是在程式執行過程中才動態地確定操作所針對的物件

//point 宣告檔案

using namespace std;

class point

;//point 實現檔案

#include#include"point.h"

using namespace std;

//float x,y;

point::point(float a,float b):x(a),y(b){}

void point::setpoint(float a,float b)

float point::getx() const

float point::gety() const

ostream &operator<<(ostream& output,const point& point)

;void circle::setradius(float r)

float circle::getradius() const

float circle::area() const

ostream &operator<<( ostream& output,const circle& circle)

;void cylinder::setheight(float h)

float cylinder::getheight() const

float cylinder::area() const

float cylinder::volume() const

ostream& operator <<(ostream& output,const cylinder& cylinder )

virtual float volume() const

virtual void shapename() const = 0;

virtual ~shape()

void point::setpoint(float a,float b)

float point::getx() const

float point::gety() const

ostream &operator<<(ostream& output,const point& point)

;void circle::setradius(float r)

float circle::getradius() const

ostream &operator<<( ostream& output,const circle& circle)

void circle::shapename() const

;void cylinder::setheight(float h)

float cylinder::getheight() const

ostream& operator <<(ostream& output,const cylinder& cylinder )

float cylinder::volume() const

void cylinder::shapename() const

{ cout<<"class cylinder"<#include"cylinder.h"

using namespace std;

int main()

{ float x = 3;

float y = 5;

float radius = 8;

float height = 10;

class shape *ptr = new point(x,y);

ptr->shapename();

cout

多型性和虛函式

11.27 多型指的是同樣的資訊被不同型別的物件接收導致不同的行為,包括 靜態多型性和動態多型性。靜態多型性包括 函式過載和運算子過載 動態多型主要 由虛函式實現。虛函式宣告 virsual 型別說明符 函式名 參數列 純虛函式 virtual 函式型別 函式名 參數列 0 在派生類中定義 抽象類 ...

多型性和虛函式

多型性是物件導向程式設計的乙個重要特徵。c 支援多型性,在 c 程式設計中能夠實現多型性。1 乙個典型的例子 先建立乙個 point 點 類,包含資料成員x,y 座標點 以他為基類,派生出乙個 circle 圓 類,增減資料成員 r 半徑 再以 circle 類為直接基類,派生出乙個 cylinde...

多型性和虛函式

1 向上型別轉換 取乙個物件的位址並將其作為基類的物件來使用 2 函式體和函式呼叫相聯絡稱為 遭 在程式執行之前 晚 在程式執行時 3 虛函式 為了引起晚 需要在基類使用vitual修飾函式 4 c 如何實現晚 vtable 編譯器放置特定的虛函式位址 在每個虛函式類中,編譯器秘密的放置乙個指標。指...