如下是實現格式:
class 派生類名:virtual 繼承方式 基類名 //virtual是關鍵字,聲明該基類爲派生類的虛基類。
在多繼承情況下,虛基類關鍵字的作用範圍和繼承方式關鍵字相同,只對緊跟其後的基類起作用。聲明瞭虛基類之後,虛基類在進一步派生過程中始終和派生類一起,維護同一個基類子對象的拷貝。由於懶畫圖引用別人的一個,請大家原諒,謝謝理解:
class CBase
{
public:
CBase(unsigned int len) : m_buffer(0)
{
if(len > 0)
{
m_buffer = new char[len];
}
}
~CBase
{
if(NULL != m_buffer)
{
delete [] m_buffer;
m_buffer = NULL;
}
}
private:
char* m_buffer;
};
class Test1 : public virtual CBase
{
public:
//...
};
class Test2 : public virtual CBase
{
public:
//...
};
class Test3 : public Test1, public Test2
{
public:
//...
};
如果沒有虛繼承則在對象釋放時m_buffer會進行兩次釋放。