關于虛函數與純虛函數的幾點
虛函數
虛函數的關鍵字是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