c++實驗(2) 繼承與多型
一、實驗目的和要求:
1.學習定義和使用類的繼承關係,定義派生類;
2.熟悉不同繼承方式下對基類成員的訪問控制;
3.掌握在派生類中初始化基類成員的方法;
4.掌握使用虛函式實現動態多樣性。
要求:認真除錯程式,認真書寫實驗報告,並對結果作分析。
二、實驗內容
1.定義乙個人員類person,包括姓名、編號、性別等資料成員和用於輸入、輸出的成員函式,在此基礎上派生出學生類student類(增加成績)和教師類teacher(增加教齡),並實現對學生和教師資訊的輸入和輸出。
2. 定義乙個抽象類shape,包含純虛函式area()(用來計算面積)和setshape()(用來重設形狀大小)。然後派生出三角形類********類、矩形rect類、圓circle類,分別求其面積。最後定義乙個total_area類,計算這幾個形狀的面積之和,各形狀的資料通過total_area類的建構函式或成員函式來設定。編寫乙個完整的程式。
3.開發乙個簡單的大學人員管理程式,該程式可以管理大學的一些基本人員:學生(student)、教師(teacher)、教授(professor)。首先設計乙個虛基類person。通過該類儲存人員的最基本資訊:姓名(name)、年齡(age)和性別(***)。然後使用該類派生出學生類student和教師類teacher,在其中新增各自的特性,如在student類中新增如下資訊:專業(speciality),在teacher類中新增院系(department)等。還有部分教師在工作的同時在職修讀學位,因此同時具有教師和學生雙重身份,所以由student類和teacher類再次派生出stuteacher類。為每個類定義乙個輸出函式print(),輸出該類相關資訊。
嘿嘿,萌新乙個,如有不對,請指出,後會改進。
#include "iostream"
#include "string"
using namespace std;
class person
person(string name,string ***,int id)
void person_display()
};class student :person
student( string name, string ***, int id,int score) :person(name, ***, id)
void student_display()
~student() };
class teacher :person
teacher(string name, string ***, int id,int age):person(name, ***, id)
void teacher_display()
~teacher() };
int main()
(2)
#include "iostream"
#include "string"
using namespace std;
class shape
;class ******** :public shape
********(double len1,double len2,double len3)
~********() {}
virtual double get_area()
virtual void set_area() };
class rect :public shape
rect(double len,double wid)
virtual double get_area()
virtual void set_area() };
class circle :public shape
circle(double r)
~circle()
{}virtual void set_area()
virtual double get_area()
};class total_area : public ********,public rect,public circle
~total_area()
double all_area(shape *p_********,shape *p_rect,shape *p_circle) };
int main()
(3)#include "iostream"
#include "string"
using namespace std;
class person
person(string name, string ***, int age)
string person_get_name()
string person_get_***()
int person_get_age() };
class student :virtual public person
student(string name, string ***, int age,string speciality):person(name,***,age)
~student()
string student_get_speciality()
void stu_print() };
class teacher :virtual public person
teacher(string name, string ***, int age, string department) :person(name, ***, age)
~teacher()
string teacher_get_department()
void tea_print() };
class professor :virtual public person
professor(string name, string ***, int age, string position) :person(name, ***, age)
~professor()
void pro_print() };
class stuteacher :public student,public teacher
stuteacher(string name, string ***,int age, string speciality,string department):person(name,***,age),student(name,***,age, speciality),teacher(name, ***, age, department)
~stuteacher()
void stu_tea_print()
{ cout << "stuteacher information: " << person_get_name() << " " << person_get_***() << " " << person_get_age() << " " <
C 的繼承與多型 詳解2
什麼叫多型 多型是指同樣的訊息被不同的物件接收時導致不同的行為。所謂的訊息是指對類成員函式的呼叫,不同的行為是指不同的實現,也就是呼叫了不同的函式。多型可以分為四類 過載多型,強制多型,包含多型,引數多型。前兩種稱為專用多型,後兩種稱為通用多型。函式過載,運算子過載屬於過載多型。強制型別轉換屬於強制...
C 繼承與多型
派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...
C 繼承與多型
1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...