純虛函數


純虛函數是指被表明為不具體實現的虛擬成員函數。它用於這樣的情況:定義一個基類時,會遇到無法定義基類中虛函數的具體實現,其實現依賴於不同的派生類。

純虛函數定義格式

virtual 返回值類型 函數名(參數表)= 0

含有純虛函數的基類是不可以定義對象的純虛函數無實現部分,不能產生對象,所以含有虛函數的類是抽象類

//Test1.h
#include<iostream>
using namespace std;
class Fish
{
public:
    virtual void water() = 0;
    virtual void eat() = 0;
};

class Shark : public Fish 
{
public:
    void water();
    void eat();
};
void Shark::eat(){cout<<"Shark eat. "<<endl;}
void Shark::water(){cout<<"Shark water. "<<endl;}
void fun(Fish *f)
{
    f->eat();
    f->water();
}

純虛函數需要注意

1.定義純虛函數時,不能定義純虛函數的實現部分。即使是函數體為空也不可以,函數體為空就可以執行,只是什么也不做就返回。而純虛函數不能調用。

(其實可以寫純虛函數的實現部分,編譯器也可以通過,但是永遠也無法調用。因為其為抽象類,不能產生自己的對象,而且子類中一定會重寫純虛函數,因此該類的虛表內函數一定會被替換掉,所以可以說永遠也調用不到純虛函數本身)

2."=0"表明程序將不定義該函數,函數聲明是為派生類保留一個位置。“=0”的本質是將指向函數體的指針定為NULL。

3.在派生類中必須有重新定義的純虛函數的函數體,這樣的派生類才能用來定義對象。(如果不重寫進行覆蓋,程序會報錯)

 

//Test.cpp
#include"Test1.h" void main() { Shark s; Fish *f = &s; fun(f); }

虛表和運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM