天天看點

關于虛函數與純虛函數的幾點小記

關于虛函數與純虛函數的幾點

虛函數

虛函數的關鍵字是virtual

虛函數是提供一種“推遲聯編”或者“動态聯編”的功能,來實作多态性,形成虛指針。虛函數的調用并不是在編譯時刻被确定的,而是在運作時刻被确定的。

一個代碼示列:

#include <iostream>
using namespace std;
class Base1
{
public:
    virtual void display()const;
};
void Base1::display()const
{
    cout<<"Base1::display()"<<endl;
}
class Base2:public Base1
{
public:
    void display()const;
};
void Base2::display()const
{
    cout<<"Base2::display()"<<endl;
}
class Derived:public Base1
{
public:
    void display()const;
};
void Derived::display()const
{
    cout<<"Derived::display()"<<endl;
}
void fun(Base1 *ptr)
{
    ptr->display();
}
int main()
{
    Base1 base1;
    Base2 base2;
    Derived derived;
    fun(&base1);
    fun(&base2);
    fun(&derived);
    return 0;
}
           

運作結果:

Base1::display()
Base2::display()
Derived::display()
Program ended with exit code: 0
           

純虛函數

純虛函數是在基類中聲明的虛函數,它在基類中沒有定義,是以不能執行個體化不能産生對象。在基類中實作純虛函數的方法是在函數原型後加“=0”

 virtual void funtion1()=0

其中虛函數的主要作用是:使基類中的純虛函數僅僅隻是繼承函數的一個接口。

其中含有純虛函數的類被稱為抽象類,若抽象類在繼承中純虛函數還是沒有被實作則還是抽象類

抽象類的作用:産生一個接口被派生類繼承

#include <iostream>
using namespace std;
class Base1
{
public:
    virtual void display() const=0;
};
class Base2:public Base1
{
public:
    void display() const;
};
void Base2::display()const
{
    cout<<"Base2::display()"<<endl;
}
class Derived:public Base2
{
public:
    void display()const;
};
void Derived::display()const
{
    cout<<"Derivd::display()"<<endl;
}
void fun(Base1 *ptr)
{
    ptr->display();
}
int main()
{
    Base2 base2;
    Derived derived;
    fun(&base2);
    fun(&derived);
    return 0;
}

           

運作結果

Base2::display()
Derivd::display()
Program ended with exit code: 0
           

繼續閱讀