我正在開發一個用於內部和外部使用的api。在Visual Studio 10.虛擬繼承和委託實現
我有一個虛擬基類IA和派生的虛擬基類IB。我用A類實現IA,然後從B中推導出IB的具體實現。這對我的理解是經典的鑽石問題。所以我做IA的繼承虛擬與同爲A的燒烤繼承,但我得到一個警告c4250 (warning C4250: 'B' : inherits 'A::A::AnInt' via dominance)
- 而這個警告接縫指示編譯器做我想我是在警告不舒服什麼,想要確保#pragma out是安全的,或者有一些我不知道的問題。
的代碼的問題
class IA
{
public:
virtual int AnInt() = 0;
};
class A : virtual public IA
{
public:
virtual int AnInt()
{
return 3;
}
};
class IB : virtual public IA
{
public:
virtual int AnInt2() = 0;
};
class B : public A, public IB
{
public:
int AnInt2()
{
return 4;
}
};
第二部分。如果您正在創建api,那麼消費開發人員將無法更改相關的抽象類。你應該避免使用繼承來設計接口,或者繼續使派生類使用虛擬繼承。