繼承和派生
面向物件程式設計有4個主要特點:抽象、封裝、繼承和多型性。
9.1繼承和派生的概念
基類A |
不可被繼承部分 |
可被繼承部分
|
繼承
派生
派生類B |
從基類繼承部分
|
自己增加的部分
|
注:
繼承箭頭由B指向A
派生箭頭由A指向B
類B繼承了類A(或者說類B是從類A派生而來的)。類B從類A繼承了除建構函式和解構函式之外的所有成員,自己還增加了新的屬性與操作。類A稱為類B的的基類或父類,類B稱為類A的派生類。
9.2繼承的實現
9.2.1派生類的定義
定義派生類的一般方式為
Class 派生類名:繼承方式 基類1,繼承方式 基類2,... ,繼承方式 基類n
{
//派生類新增加的成員宣告
}
對於單繼承情況,派生類的定義可簡化為
Class 派生類名:繼承方式 基類名
{
//派生類新增成員的宣告
}
類族宣告程式碼(儲存在標頭檔案shape.h中)
9.2.2派生類的構成
派生類的成員包括繼承基類的成員和派生類定義時宣告的成員。
派生類自己增加的成員,完成兩個需求:修改基類成員和描述新的特徵或方法。
派生類修改基類的成員,通過在派生類中宣告一個與基類成員同名的新成員來實現。即同名覆蓋。
注意:如果在派生類中定義與基類同名的成員函式,則函式名和形參表都要完全相同,否則,就成為過載函式而不是覆蓋函式。
9.2.3繼承訪問控制
C++提供了公有繼承(
1.公有繼承
關鍵字public,具有以下的訪問控制特性:①基類的公有成員、保護成員在派生類中仍保持原來的訪問屬性。
②派生類的成員函式可以訪問基類的公有成員和保護成員,不能訪問私有成員。
③派生類以外的其他函式可以可以通過派生類的物件訪問從基類繼承的公有成員。
2.保護繼承
Protected是關鍵字,具有以下訪問控制特性:
①基類的公有成員,保護成員在派生類中都變為protected訪問屬性。
②派生類的成員函式可以訪問基類成員的公有成員和保護成員,不能訪問基類成員的私有成員。
③派生類以外的其他函式不可以通過派生類的物件訪問從基類繼承的公有成員。
3.私有繼承
Private是關鍵字,具有以下訪問控制特性:
①基類的公有成員、保護成員在派生類中都變為private訪問屬性。
②派生類的成員函式可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員。
③派生類以外的其他函式不可以通過派生類的物件訪問從基類繼承的公有成員。
繼承型別 存取方式 |
public |
protected |
private |
public |
public |
protected |
不可訪問 |
protected |
protected |
protected |
不可訪問 |
private |
private |
private |
不可訪問 |
覆蓋現象:
#include<iostream>
using namespace std;
class base
{
public:
void function(){
cout<<"function ofclass base"<<endl;
}
};
class deriver:public base{
public:
void function(){
cout<<"function of class deriver"<<endl;
}
};
int main()
{
deriver derobj;
derobj.function();
return 0;
}