2017.9.21

抽象類


抽象類的一般形式

帶有純虛函數的類稱為抽象類:

class? 類名

{

virtual 類型 函數名(參數表)=0;

//純虛函數

...

}


注意:

抽象類只能作為基類來使用。

不能聲明抽象類的對象,只能聲明抽象類的指針。

純虛函數直到被覆蓋前所派生的類均為抽象類


抽象類的作用

抽象類為抽象和設計的目的而建立,將有關的數據和行為組織在一個繼承層次結構中,保證派生類具有要求的行為。

對于暫時無法實現的函數,可以聲明為純虛函數,留給派生類去實現。


使用純虛函數時應注意:

(1)抽象類中可以有多個純虛函數。

(2)抽象類也可以定義其他非純虛函數。

(3)從抽象類可以派生出具體或抽象類,但不能從具體類派生出抽象類。

問題:抽象類需要有構造函數和析構函數嗎?

抽象類通常代表一個抽象的概念,它提供一個繼承的出發點。

在一個復雜的類繼承結構中,越上層的類抽象程度越高,有時甚至無法給出某些成員函數的實現,顯然,抽象類是一種特殊的類,它一般處于類繼承結構的較外層。

引入抽象類的目的,主要是為了能將相關類組織在一個類繼承結構中,并通過抽象類來為這些相關類提供統一的操作接口,更好的發揮多態性。

抽象類使得數據結構更加清晰,更加貼近自然


拷貝構造函數

對象的賦值:

class Student{

string name;

public:

Student(char* pName=“”){

name=pName;

}

};

Student a("jenny");

Student b;

b=a;

一個已知對象賦值給另一個已知對象。

通過對賦值運算符的重載實現的。


對象的復制(拷貝):用一個已知對象構造(初始化)一個新對象。

例:一個已知對象構造(初始化)另一對象

Student s1(“Jenny”);

Student s2=s1;即Student s2(s1);

Student fn(Student s){Student k;//.......? ;return k}

void main()

{Student m,n;n=fn(m);}

使用Student (char*? )不再合適,引入新的構造函數——拷貝構造函數:

Student (Student& s);或者是Student ( const Student& s);


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 筆記內容: 抽象類 抽象類的一般形式 帶有純虛函數的類稱為抽象類: class 類名{virtual 類型 函數名...
    戰昭辰閱讀 213評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 抽象類帶有純虛函數的類稱為抽象類,抽象類只能作為基類來使用??截惡瘮涤靡粋€已知對象構造一個新對象。
    夏維閱讀 135評論 0 0
  • C++ 面向對象編程 博客園地址:http://www.cnblogs.com/xiongxuanwen/p/42...
    先之閱讀 687評論 0 1
  • 我以為我會很平靜。 當再次看完你所有的微博。 還是會心里難受。 揣測著你是如何的想念才會愿意寫出這份思念。 你是如...
    路口路口閱讀 1,894評論 1 3