1》首先建立乙個基類student類
標頭檔案student.h 如下:
#ifndef student_h
#define student_h
#includeusing namespace std;
/*基類student標頭檔案
*/class student;
#endif
2》基類student實現
student.cpp
#include"student.h"
#includestudent::student(int num, std::string name, float score)
void student::display();
#endif
4》派生類graduate實現
#include#include"graduate.h"
graduate::graduate(int num, std::string name, float score,float wage):student(num,name,score)
void graduate::display()
執行結果如下:
第二次只是輸出了派生類中相應的基類成員,而派生類中新增的資料成員「wage」沒有輸出 。
6》如何才能使其輸出呢(即實現多型性)
將基類student類中的display函式宣告為虛函式即可:virtual void display();
再次執行就可以發現,可以利用父類的指標(p_stu)指向子類的物件(gra),通過p_stu->display()即可呼叫子類的display函式了。
7》這種多型性也適用於析構函式中。
上述兩個類均未給出析構函式的形式,其使用預設析構函式
當類中存在有動態分配的儲存時,該類的物件析構時也要進行**資源。這裡為了實驗,只是列印一句話。
分別在標頭檔案和類實現中宣告和實現該析構函式,如下:
宣告:
~student();
實現:
student::~student(){
cout<
宣告:~graduate();
實現:
graduate::~graduate(){
cout<
在main函式中有如下語句 :
student *p_stu=new graduate(3001,"zhang",88.7,300);
p_stu->display();
delete p_stu;
此時結果為:
可以看出,只執行了基類的析構函式,而沒有執行派生類的析構函式。原因跟之前 介紹 的display()函式呼叫相同。
8》如何也能執行派生類的析構函式呢?
方法與之前介紹的display函式一樣,使用虛函式,即使用虛析構函式。
將析構函式宣告為虛函式:即在前面新增virtual即可(只需要在基類中宣告為virtual即可,其派生類自動變為virtual)。
此時結果為:
基類與派生類的轉換
一 基類與派生類的轉換 3種繼承方式 公用 保護 私有繼承 中,公用派生類才是基類真正的子型別,它完整地繼承了基類的功能。不同型別資料之間在一定條件下可以進行型別的轉換。基類與派生類物件之間是否也有賦值相容的關係,可否進行型別間的轉換?回答是可以的。基類與派生類物件之間有賦值相容關係,由於派生類中包...
基類與派生類的轉換
一 基類與派生類的轉換 3種繼承方式 公用 保護 私有繼承 中,公用派生類才是基類真正的子型別,它完整地繼承了基類的功能。不同型別資料之間在一定條件下可以進行型別的轉換。基類與派生類物件之間是否也有賦值相容的關係,可否進行型別間的轉換?回答是可以的。基類與派生類物件之間有賦值相容關係,由於派生類中包...
基類與派生類
初學c 的時候,很多人都很頭疼各種訪問標號下基類與派生類的關係,其實,死記硬背肯定不是乙個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的 在沒有繼承之前,類的只有兩類使用者 類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割 類的使用者只能訪問類的p...