在很多多態的例子中,我們都可以看到將基類的方法聲明為純虛函數(virtual void run() const = 0;),這樣可以要求子類必須實現這個方法,同時可以體現面向接口編程。

使用virtual的地方還有虛擬繼承和虛擬析構函數。

例子:

class Point2d{   
public:   
//   
protected:   
float _x;   
float _y;   
}
;   
class Vertex : public virtual Point2d{   
public:   
//   
protected:   
Vertex 
*next;   
}
;   
class Point3d : public virtual Point2d{   
public:   
//   
protected:   
float _z;   
}
;   
class Vertex3d: public Vertex, public Point3d{   
public:   
//   
protected:   
float mumble;   
}
;  


本文來自CSDN博客,轉載請標明出處:http:
//blog.csdn.net/chief1985/archive/2009/11/01/4755560.aspx




class SubClass : virtual public BaseClass 中以virtual聲明的基類??!由于C++支持多重繼承,所以對于一個派生類中有幾個直接父類,而幾個直接父類中有幾個可能分別繼承自某一個基類(就是父類的父類),這樣在構造最終派生類時,會出現最終派生類中含有多個同一個基類的情況,就會產生二義性的問題(不知道該調用哪個基類的成員變量和函數),為解決此問題,需要使用虛基類,即只對此基類生成一塊內存區域,這樣最終派生類中就只會含有一個基類了。
虛擬繼承的作用:解決由多繼承中,父類中可能有相同的父類而引發的二義性問題。虛擬繼承的虛擬和虛擬函數的虛擬沒有任何關系。