類的繼承學習總結 1

2021-09-25 04:03:27 字數 2925 閱讀 4953

繼承(is-a)是類之間關係的一種形式,其他形式還有組合(has-a)等;

基類:也稱為父類,乙個類繼承父類的全部成員

派生類:也稱為子類,他是由基類派生而來

語法:class base{};

class derived : public base{};

可以在已有類的基礎上新增功能

可以給類新增資料

可以修改類的行為

派生類需要自己的建構函式

派生類可以根據自己的需要新增額外的資料成員和成員函式

class ratedplayer :

public tabletennisplayer

;

派生類不能直接訪問基類的私有成員,但可以通過基類的public方法進行訪問。

派生類建立物件過程:

ratedplayer::ratedplayer(unsigned int r, const string & fn, const string & ln, bool ht)

:rating(r),tabletennisplayer(fn,ln,ht)

由上段**可知,派生類成員變數也可以使用初始化列表進行初始化。

總結:派生類建構函式的要點

派生類物件可以使用基類的公有方法

基類指標可以不進行顯示型別轉化的情況下指向派生類物件

基類引用可以不進行顯示型別轉化的情況下引用派生類物件

基類指標或者引用只能呼叫基類的方法,不能呼叫派生類的方法。

tabletennisplayer 	player1("tara", "boomdea", false);

ratedplayer rplayer1(1140, "mallory", "duck", true);

//基類引用/指標可以不進行顯示型別轉化的情況下引用派生類物件/指向派生類物件

tabletennisplayer & rt = rplayer1;

tabletennisplayer * pt = &rplayer1;

rt.name();

printf("\n");

pt->name();

派生類繼承了基類全部成員變數和方法,派生類是乙個特殊的基類,派生類可以用自己特有的成員變數和成員函式,因此當派生類指標和引用訪問了基類中不存在的成員變數將出錯。

實現多型公有繼承的機制:

class brass

;

派生類:

class brassplus :

public brass

;

實現多型:

brass		piggy("porcelot pigg", 381299, 4000.00);

brassplus hoggy("horatio hogg", 382288, 3000.00);

piggy.viewacct();//呼叫基類方法

cout << endl;

hoggy.viewacct();//呼叫派生類方法

cout << endl;

虛方法語法:

virtual void viewacct()const;//顯示賬戶資訊
備註:

1、可以使用型別限定符指出具體使用哪個類的方法

2、如果使用了虛方法,程式將根據引用或者指標的物件的型別來選擇方法

3、如果沒有使用虛方法,程式將根據引用型別或者指標型別選擇方法

虛析構函式的作用:讓析構函式呈現多型,能夠釋放子類的物件
如果析構函式不是虛的,則將只呼叫對於指標型別的析構函式;

如果析構函式是虛的,則將呼叫相應物件型別的析構函式;

使用析構函式可以保證正確的析構函式序列被呼叫。

靜態聯編:編譯器在編譯過程完成的聯編

動態聯編:編譯器在程式執行時生成的正確的**

指標和引用相容性原則原理就是動態聯編。

不摒棄靜態聯編的原因:

效率:如果派生類不重新定義基類的任何方法,不需要使用動態聯編;如果類不用做基類,也不需要動態聯編。在這些情況下,使用靜態聯編更合理。效率更高。

概念模型:在設計類時,可能包含一些不在派生類重新定義的成員函式。不定義為虛函式,其效率會很高。因此,如果在派生類中重新定義基類的方法,則將其設定為虛方法;否則,設定為非虛方法。

編譯器處理虛函式的方法:給每個物件新增乙個**成員。
**成員儲存了乙個指向函式位址陣列的指標,這個陣列稱為虛函式表。

虛函式表裡面存放了類物件宣告的虛函式的位址。

例如:基類物件包含乙個指標,指向基類的虛函式表;

派生類物件包含乙個指標,指向派生類的虛函式表;

如果派生類提供了虛函式的新定義,則將對應的新位址加入虛函式表;如果沒有重新定義虛函式,則拷貝基類中虛函式表中對應的函式位址。

虛函式成本分析

每個物件都將增大,增大量為儲存位址的空間;

每個類,都要建立虛函式表;

每個函式呼叫,需要到虛函式表中查詢位址

哪些函式可以設定為虛函式,哪些不可以

建構函式不能是虛函式:派生類建立物件的機制決定

虛函式可以為虛函式;

友元不能是虛函式:友元不是類的成員(友元函式呼叫虛函式)

基本思想:以ellipse和circle類為例,從ellipse和circle類中抽象出他們的共性,將這些共性放到乙個抽象基類裡面。然後從該抽象基類派生出ellipse和circle類。這樣就可以使用基類指標陣列管理ellipse和circle類物件,即可以使用多型方法。

含有純虛函式的類,稱為抽象類。抽象類不可以建立該類物件。通常被用來設計介面。

java學習總結 類的繼承

這是第五次課後的總結。這次課學的是類的繼承。內容有 1.類繼承的實現和作用 前面已經學了類的語法格式,現在學了類的繼承。類的繼承是用extends關鍵字。示例 public class unstudent extends student類的繼承作用 子類繼承父類後,子類會繼承父類的屬性和方法,根據需...

類的繼承總結

1.為什麼要繼承,如何繼承,繼承到了什麼?1 現實中存在包含的關係 節省寫 的時間 unstudent,student 2 extends關鍵字 3 子類繼承到了父類中的所有屬性和方法 子類可以定義自己特有的屬性和方法 2.自動轉型與強制轉型 1 子類物件的型別可以自動轉成父類型別 stu3 2 將...

類的繼承總結

類的繼承 某小白總結 一,格式 public class 類名 子類 extends 類名 父類 二,繼承的特點 1.單繼承,也就是乙個子類只能繼承乙個父類 2.沒有設定父類的類,自動有個object的父類 三,子類與父類的關係 子類會繼承父類所有的屬性和方法。但是,兩者在同乙個包下時 子類中和子類...