2011-03-09 35 views
4

Virtual Public Class用於確保類的對象只繼承一個子對象。C++中的虛擬公共類的副作用

class L { /* ... */ }; // indirect base class 
class B1 : virtual public L { /* ... */ }; 
class B2 : virtual public L { /* ... */ }; 
class D : public B1, public B2 { /* ... */ }; // valid 

當我們不使用它作爲單繼承時,我們使用虛擬公有方法時是否有副作用?例如,是

class L { /* ... */ }; // indirect base class 
class B1 : virtual public L { /* ... */ }; 
class D : public B1 { /* ... */ }; // valid 

相同

class L { /* ... */ }; // indirect base class 
class B1 : public L { /* ... */ }; 
class D : public B1 { /* ... */ }; // valid 

?我的意思是,在所有可能的情況下,讓父類成爲虛擬類型是安全的嗎?

回答

7

使父級虛擬化「以防萬一」是安全的。該標準沒有指定如何實現虛擬繼承,但可能會有輕微的性能下降。除非你寫了一些性能至關重要的東西,否則你不需要擔心它。需要