1. 程式人生 > >C++純虛類

C++純虛類

純虛類有以下特徵:
含有一個純虛擬函式的類,叫做純虛類。純虛類不可以定義物件。
我個人覺得這個說法應該就是把純虛類的主要特點說明了:
1、只要有一個純虛擬函式。就稱為純虛類。
所以如果子類沒有實現純虛擬函式,相當子類也有純虛擬函式,所以子類也是純虛類。
2、其他類的定義與使用方式都與一般的類差不多。大致有如下地方:
純虛類可以有成員變數 (可以)
純虛類可以有普通的成員函式(可以)
純虛類可不可以有其他虛擬函式(可以)
純虛類可不可以又帶有引數的建構函式? (可以)
可不可以在純虛類的派生類的建構函式中顯式呼叫純虛類的帶引數建構函式(可以)
3、使用方式上:不可以定義一個物件。
下面是另外一篇文章中說的說法:(純虛類也稱為抽象類)
帶有純虛擬函式的類稱為抽象類。抽象類是一種特殊的類,它是為了抽象和設計的目的而建立的,它處於繼承層次結構的較上層(而不是絕對的上層,也有可能是中層,甚至底層?)。抽象類是不能定義物件的,在實際中為了強調一個類是抽象類,可將該類的建構函式(設定為protected)說明為保護的訪問控制權限。
抽象類的主要作用是將有關的組織在一個繼承層次結構中,由它來為它們提供一個公共的根(其實不一定是根),相關的子類是從這個根派生出來的。
抽象類刻畫了一組子類的操作介面的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作介面,而完整的實現留給子類。

抽象類只能作為基類來使用(大多數情況是其他類的基類,但是抽象類本身也有可能是子類),其純虛擬函式的實現由派生類給出。如果派生類沒有重新定義純虛擬函式,而派生類只是繼承基類的純虛擬函式,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛擬函式的實現,則該派生類就不再是抽象類了,它是一個可以建立物件的具體類了

4、純虛類一般是做為介面使用(這裡要好好看設計模式了)
[cpp] view plain copy 
#include<iostream>  
#include<string>  
#include<vector>  
#include<algorithm>  
using namespace std;  
  
class animal  
{  
protected:  
    animal(){}  
    virtual void  eat(const string name) =0;  
};  
  
  
class dog:public animal  
{  
public:  
    vector<string> m_food;  
  
    void eat(const string name);  
    void push_back(const string name);  
};

void dog::eat(const string name)  
{  
    vector<string>::iterator iter=std::find(m_food.begin(),m_food.end(),name);  
    if (m_food.end() !=iter)  
    {  
        cout<<"Dog eat "<<*iter<<endl;  
    }  
}  
  
void dog::push_back(const string name)  
{  
    if (m_food.end() ==std::find(m_food.begin(),m_food.end(),name))  
    {  
        m_food.push_back(name);  
    }  
}  
           
  
int main(void)  
{  
    dog d;  
    d.push_back("bone");  
    d.eat("bone");  
  
    return 0;  
}

相關推薦

C++

純虛類有以下特徵: 含有一個純虛擬函式的類,叫做純虛類。純虛類不可以定義物件。 我個人覺得這個說法應該就是把純虛類的主要特點說明了: 1、只要有一個純虛擬函式。就稱為純虛類。 所以如果子類沒有實現純虛擬函式,相當子類也有純虛擬函式,所以子類也是純虛類。 2、其他類的定義與使

【重構C++知識體系】

類 /*在C++中,我們通過類來定義自己的資料結構*/ 類的作用(思想) 為了使C++遵守OOP基本法的資料抽象和封裝. 資料抽象:就是將”介面”和”實現”實現分離的程式設計技術. 封裝:隱藏物件的屬性和實現細節,僅對外公開介面. 拓展:設計模

什麼情況下應用

前幾天跟同事brainstorm,討論一個關於純虛類的使用問題,挺有意思。回來心中久久不能平靜,寫出來一吐為快。 不論在C++中還是C#中,純虛類都是不能例項化的,這是因為純虛類其實是一個對業務型別的一種高度抽象,本質上是不存在這種東西的,所以也就不能例項化它。對於C++中

c++解構函式

純虛解構函式和虛解構函式的區別在於純虛解構函式一般用於將類定義為抽象類,這時候有同學會問啦?抽象類不是定義一般成員方法的嗎?原因是這樣的,當我們在類裡面實在找不到可以定義為純虛擬函式的成員方法的時候,這時候可以將解構函式定義為純解構函式;純虛構函式的實現需要注意以下幾個地方:

4.6 C++抽象基成員函數

中新 error isp ... 先來 必須 pub 對象 c++ 參考:http://www.weixueyuan.net/view/6376.html 總結:   在C++中,可以通過抽象基類來實現公共接口   純虛成員函數沒有函數體,只有函數聲明,在純虛函數聲明結尾加

C++多態、函數、函數、抽象

多態 內存泄漏 一份 並且 靜態成員函數 返回值 訪問 類對象 virt 一、C++多態 C++的多態包括靜態多態和動態多態。靜態多態包括函數重載和泛型編程,動態多態包括虛函數。靜態多態是指在編譯期間就可以確定,動態多態是指在程序運行時才能確定。 二、虛函數 1、虛函數為類

C++——的綜合案例——函數與抽象( 加強對接口與多態,以及派生構造函數的理解 )

構造 set 由於 技術 als str wid choice gre 註意派生類構造函數的寫法。 1 #include <iostream> 2 3 using namespace std; 4 5 enum COLOR {

C++中抽象以及/、解構函式的區別與介紹

一、虛擬函式 在某基類中宣告為 virtual 並在一個或多個派生類中被重新定義的成員函式,用法格式為:virtual+函式返回型別+ 函式名(引數表) {函式體};實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。 二、純虛擬函式 純虛擬函式是一種

[收集]c++抽象虛擬函式以及巧用解構函式實現介面

在Java、C#中有關鍵詞abstract指明抽象函式、抽象類,但是在C++中沒有這個關鍵詞,很顯然,在C++也會需要只需要在基類宣告某函式的情況,而不需要寫具體的實現,那C++中是如何實現這一功能的,答案是純虛擬函式。 含有純虛擬函式的類是抽象類,不能生成物件,只能派生。

C++基礎知識 基指針、函數、多態性、函數、析構

這就是 nbsp rtu 可能 就會 delete 繼承 都是 del 一、基類指針、派生類指針 父類指針可以new一個子類對象 二、虛函數 有沒有一個解決方法,使我們只定義一個對象指針,就可以調用父類,以及各個子類的同名函數? 有解決方案,這個對象指針必須是一個父

函數和抽象

程序 uri 文件 hit 每一個 實現 use ble png -------------------siwuxie095 純虛函數 在 C++ 中,用 純 字來修飾虛函數,即 純虛函數 純虛函數沒有

C++中父函數必需要實現嗎?

font virt ron rtu 實現 div -a 實例對象 ont 一、情景 C++中父類的虛函數必需要實現嗎? class Vir{ public: virtual void tryVirtual(); }; class CVir:public Vir{

C++ 函數 、函數、接口的實用方法和意義

函數聲明 函數 order ack 創建 無需 art %d 最終 也許之前我很少寫代碼,更很少寫面向對象的代碼,即使有寫多半也很容易寫回到面向過程的老路上去。在寫面向過程的代碼的時候,根本不管什麽函數重載和覆蓋,想到要什麽功能就變得法子的換個函數名字,心裏想想:反正函數重

C++ 在繼承中函數、函數、普通函數,三者的區別

pre 沒有 實例 space 自己的 img 引用 虛函數 public 源地址:http://www.cnblogs.com/xudong-bupt/p/3570304.html 1.虛函數(impure virtual)   C++的虛函數主要作用是“運行時多態”,父

C#.NET常見問題(FAQ)-override覆蓋和virtual如何理解

over sta rri net 技術分享 交流 關鍵字 ace images 父類使用virtual關鍵字,可以讓子類的實例完全代替基類的類成員。(前面父類virtual後面子類override),比如下面我定義一個Employee的員工的基類,給這個基類定義了Start

C++virtual 函數、函數

str 也不能 都是 輸出 優秀 ios image log inf 前提摘要: 虛函數聯系到多態,多態聯系到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麽都沒得談。 虛函數定義: 指向基類的指針或引用在操作它的多態類(子類/派生類)對象時,會根據不同的類對象,調用

C++中基析構函數的作用及其原理分析

art 收回 顯示 就是 靜態綁定 運行 style 轉載 調用父類 虛析構函數的理論前提是 執行完子類的析構函數,那麽父類的虛構函數必然會被執行。 那麽當用delete釋放一個父類指針所實例化的子類對象時,如果沒有定義虛析構函數,那麽將只會調用父類的析構函數,而不會調用子

抽象 函數

code space 構造函數 point 構造 red ostream 意義 led 1 #include <iostream> 2 using namespace std; 3 /***********************************

C++中函數

tps 否則 情況 一點 base c++ () ase UNC 1.純虛函數 virtual ReturnType Function()= 0; 純虛函數可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函數的類叫做抽象類。這種類

抽象函數,函數的意義

virt 性能 using 容易出錯 知識 浪費 中比 應該 public   C語言是面向過程的語言,C++是面向對象的語言,區分它們面向什麽的重要區別在於C++比C多個類。那麽在我看來,抽象就是類的升華。   一般剛學習C++的時候,抽象這個東西給人最大的感覺就是太抽象