程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ 類的繼承派生

c++ 類的繼承派生

編輯:C++入門知識

作者:張煜


這周上的c++課上老師講了類的繼承和派生,總覺得他講的相當的不完整.

類的繼承是利用已有的類來建立專用類的編程技術.從另一個角度來說,從已有的類(父類)產生一個新的子類,稱為類的派生.

繼承是面向程序設計中最重要的機制,它支持層次分類的觀點.繼承使得程序員可以在一個較一般的類的基礎上很快地建立一個新類,而不必從零開始設計每個類,在現實世界中,許多實體或概念不是孤立的,它們具有共同的特征,但也有細微的差別,人們使用層次分類的方法來描述這些實體或概念之間的相似點和不同點.如下圖: \ <喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+zai5/bzMs9C7+tbGo6y/ydLUwPvTw9LR09C1xMr9vt3A4NDNwLS2qNLl0MK1xMr9vt3A4NDNoaPL+bao0uW1xNDCtcTK/b7dwODQzbK7vfbTtdPQ0MK2qNLltcSzydSxo6y2+MfSu7nNrMqx07XT0L7JtcSzydSxoaPO0sPHs8bS0bTm1Nq1xNPDwLTFycn60MLA4LXEwODOqrv5wOCjrNPWs8bOqri4wOCho9PJ0tG05tTatcTA4MXJyfqz9rXE0MLA4LPGzqrFycn6wOCjrNPWs8bOqtfTwOChoyYjMjY2ODQ7yr3I58/Co7o8YnI+CjwvcD4KCjxwcmUgY2xhc3M9"brush:java;">class <派生類名>:<繼承方式><基類名> { <派生類新定義成員> };class是關鍵詞,<派生類名>是新定義的一個類的名字,它是從<基類名>中派生的,並且按指定的<繼承方式>派生的。


繼承方式:

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。 2. 私有繼承(private)(在繼承之中如果沒有聲明的話則默認為私有繼承) 私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。 3. 保護繼承(protected) 保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函數或友元訪問,基類的私有成員仍然是私有的。 下面列出三種不同的繼承方式的基類特性和派生類特性。 public protected private 公有繼承 public protected 不可見 私有繼承 private private 不可見 保護繼承 protected protected 不可見
//========================================================

然後對於繼承來說,子系繼承父系的數據權限也是不相同的,

有下面的規則來參考:

//========================================================

private 屬性不能夠被繼承。
使用private繼承,父類的protected和public屬性在子類中變為private;
使用protected繼承,父類的protected和public屬性在子類中變為protected;
使用public繼承,父類中的protected和public屬性不發生改變;


所以,在公有繼承時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。

//==========================================================

具體化

類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若干個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特征,而派生類通過增加行為將抽象類變為某種有用的類型。


延續化

先定義一個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函數就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。


派生類

在多繼承時,一個派生類有多於一個的基類,這時派生類將是所有基類行為的組合。

派生類將其本身與基類區別開來的方法是添加數據成員和成員函數。因此,繼承的機制將使得在創建新類時,只需說明新類與已有類的區別,從而大量原有的程序代碼都可以復用,所以有人稱類是“可復用的軟件構件”。

//============================================================

作用域分辨 形式為:基類名::成員名;基類名::成員名(參數表); 如果某派生類的多個基類擁有同名的成員,同時,派生類又新增這樣的同名成員,在這種情況下,派生類成員將覆蓋所有基類的同名成員。這就需要這樣的調用方式才能調用基類的同名成員。 例子:多繼承同名
#include 
#include 
using namespace std;

class B1
{
public:
    int nV;
    void fun()
    {
        cout<<"member of B1 "<
輸出結果為: member of D1 1 member of B1 2 member of B2 3 以上通過作用域分辨符,解決了訪問基類中被屏蔽的同名成員。 //=============================================================

注意:

1.基類函數可以訪問基類成員,派生類函數可以訪問派生類成員.

2.同基類成員,私有數據成員只能被同一類的成員函數訪問.公有成員可以被外界訪問.

3.基類成員函數只能訪問基類成員,不能訪問派生類成員.

4.在派生類外可以訪問派生類的共有成員,而不能訪問派生類的私有成員.

//=====================================================================

在這裡我們要討論在對於派生類新增的函數能否訪問基類的數據,在此,我們要考慮基類成員的訪問屬性:

(1) 公共繼承(public inheritance)

基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員函數仍為基類私有.

(2) 私有繼承(private inheritance)

基類的公有成員和保護成員在派生類中成了私有成員,其私有成員仍為基類私有.

(3) 受保護的繼承(protected inheritance)

基類的公有成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有.

保護成員的意思是:不能被外界引用,但可以被派生類的成員引用.



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved