C 虛函式與多型性(3)例題

2021-10-06 16:24:03 字數 4489 閱讀 9824

(1)編寫乙個程式計算正方體、球體和圓柱體的表面積和體積。

定義乙個抽象類shape,在此基礎上派生出正方體類、球體類和圓柱體類,都有計算物件表面積和體積的函式area()和計算物件體積的函式volume (),在主函式中定義乙個shape指標陣列分別指向正方體類、球體類和圓柱體類的物件,並通過shape類的指標實現對這3個物件的成員函式的呼叫,輸出正方體、球體和圓柱體的表面積和體積。

#include

using

namespace std;

const

double pi=

3.14

;class

shape

virtual

double

area()

=0;virtual

double

volume()

=0;}

;class

cube

:public shape

cube

(double side)

double

area()

double

volume()

private

:double side;};

class

sphere

:public shape

sphere

(double radius)

double

area()

double

volume()

private

:double radius;};

class

volumn

:public shape

volumn

(double radius,

double height)

double

area()

double

volume()

private

:double radius;

double height;};

void

test1()

intmain()

某學校對教師工資的計算公式如下:固定工資+課時補貼。教授的固定工資為5000元,每個課時補貼50元;副教授的固定工資為3000元,每個課時補貼30元;講師的固定工資為2000元,每個課時補貼20元。

要求:定義教師抽象類,資料成員包括姓名,性別,工號,固定工資,課時數(上課總的時間),總工資;成員函式pay計算總工資,將其定義為虛函式(因計算方法不同),其他成員函式根據需要進行定義。派生出不同職稱的教師類(每個類具有相同的資料成員);不同類的工資計算方法不同(課時工資不同)編寫程式求若干教師的工資。

#include

#include

using

namespace std;

class

teacher

virtual

void

input()

=0;virtual

void

pay()=

0;virtual

~teacher()

};class

jiaoshou

:public teacher

void

input()

void

pay()}

;class

fujiaoshou

:public teacher

void

input()

void

pay()}

;class

jiangshi

:public teacher

void

input()

void

pay()}

;void

test1()

intmain()

某公司主要有四類人員:

經理、兼職技術員、兼職銷售員,銷售經理。

這些人員具有職工編號、姓名、年齡、性別、級別、月工資

兼職技術人員按照每小時100元領取月工資

兼職銷售人員按照銷售額的4%領取月工資

經理領取8000元的固定工資

銷售經理既拿固定月薪,也領取銷售提成;固定月薪為5000,銷售提成為當月銷售總額的千分之5

程式要具有對所有人提公升級別功能(經理為4級,兼職銷售為1級,其他人員為3級)人員編號基數為1000。每輸入乙個人員資訊,編號順序加1。

類層次結構下:

設計基類:

職工類employee

資料成員:職工編號、姓名、年齡、性別、級別,月工資

靜態資料成員total(記錄人員編號的最大值,新員工的編號在此基礎上增1)

成員函式:

帶參的建構函式(輸入除工資外的基本資訊。設定級別的預設值為1)

設定成員函式change_level(int),用來調整級別,定義純虛函式pay(),用於計算月工資。派生出:

兼職技術員類technician

經理類manager

兼職銷售員類salesman

利用經理類和銷售員類派生出銷售經理類

#include

#include

using

namespace std;

class

employee

employee

(int

long id,string name,

int age,string ***,

int level=1)

void

change_level

(int newlevel)

virtual

void

setid()

=0;virtual

void

input()

=0;virtual

void

pay()=

0;virtual

~employee()

};int employee::total=

1000

;class

technician

:virtual

public employee

technician

(int

long id,string name,

int age,string ***,

int level,

int workhours)

:employee

(id,name,age,***,level)

void

setid()

void

input()

void

pay()}

;class

manager

:virtual

public employee

manager

(int

long id,string name,

int age,string ***,

int level,

double bsalary)

:employee

(id,name,age,***,level)

void

setid()

void

input()

void

pay()}

;class

saleman

:virtual

public employee

saleman

(int

long id,string name,

int age,string ***,

int level,

double ssalary)

:employee

(id,name,age,***,level)

void

setid()

void

input()

void

pay()}

;class

smanager

:public saleman,

public manager

smanager

(int

long id,string name,

int age,string ***,

int level,

double bsalary,

double ssalary)

:saleman

(id,name,age,***,level,ssalary)

,manager

(id,name,age,***,level,bsalary)

void

setid()

void

input()

void

pay()}

;void

test1()

intmain()

C 多型性與虛函式

物件導向程式設計中的多型性是指向不同的物件傳送同乙個訊息,不同物件對應同一訊息產生不同行為。在程式中訊息就是呼叫函式,不同的行為就是指不同的實現方法,即執行不同的函式體。也可以這樣說就是實現了 乙個介面,多種方法 從實現的角度來講,多型可以分為兩類 編譯時的多型性和執行時的多型性。前者是通過靜態聯編...

C 多型性 與 虛函式

1.運算子過載 運算子過載形式 1 過載為類的成員函式 運算子過載函式說明為類的成員函式的格式為 類名 operator 運算子 參數列 如 c1 c2 編譯器將給出的解釋為 c1.operator c2 該運算子過載函式僅僅有乙個引數,所以過載為成員函式時,雙目運算子僅有乙個引數。對於單目運算子,...

C 多型性與虛函式

多型性是物件導向程式設計的關鍵技術之一。利用多型性技術,可以呼叫同乙個函式名的函式,實現完全不同的功能。若程式語言不支援多型性,不能稱為物件導向的語言。在c 中有兩種多型性 1 定義格式 虛函式是乙個類的成員函式,定義格式如下 virtual 返回型別 函式名 參數列 說明 2 通過虛函式實現多型性...