實現抽象類成員是否有可能實現一個抽象基類,成員從在C++中另一個父類繼承?在父類
它工作在C#,所以我試圖做它在C++:雖然
// Virtual destructors omitted for brevity
class ITalk
{
public:
virtual void SayHi() = 0;
};
class Parent
{
public:
void SayHi();
};
class Child : public Parent, public ITalk
{
};
void Parent::SayHi()
{
std::printf("Hi\n");
}
我的編譯器真的不喜歡它:
ITalk* lChild = new Child(); // You idiot, Child is an abstract class!
lChild->SayHi();
我不能添加public ITalk
到Parent
類,因爲「基礎類‘的iTalk’已經是一個基類的‘父’的。」我可以移動public ITalk
到Parent
類,但在我的特殊情況下,很多事情複雜化。
這使得它更清晰如何編譯器看到這些函數。如果說編譯器只查看本地類,並且在查找「ITalk :: SayHi()'的重載實現時不會搜索繼承樹,是否正確? –
是的,這是真的。當實例化一個對象時,編譯器會從你正在實例化的東西中查找並確保直接在它上面的任何仍然是純虛擬的東西已經在本地實例化**。 –