我想要爲遊戲框架提出一個抽象概念,一種方法是創建一個圖形和音頻類,這些是您的遊戲使用的接口,並且您派生出特定的實現您的目標平臺(桌面/移動/控制檯)。多繼承問題
我這裏有這個想法的一些示例代碼:
#include <iostream>
#include <string>
using namespace std;
struct Graphics
{
virtual ~Graphics() {}
virtual void Rect() {}
};
struct Text
{
virtual ~Text() {}
virtual void Print(string s) {}
};
struct IosGraphics : public Graphics
{
void Rect() { cout << "[]"; }
};
struct IosText : public Text
{
void Print(string s) { cout << s << endl; }
};
struct Output : public Graphics, public Text
{
};
struct IosOutput : public Output, public IosGraphics, public IosText
{
};
int main()
{
Output * output = new IosOutput();
output->Rect(); // this calling Graphics::Rect not IosGraphics::Rect
output->Print("Hello World!"); // this calling Text::Print not IosText::Print
cin.get();
}
的問題是,輸出是使用Text ::打印的,而不是IosText ::打印,我不知道這是關係到鑽石的問題我可能不得不使用虛擬繼承或其他東西。任何幫助是極大的讚賞。
畫出你的班級結構,你會發現它沒有任何意義......不知何故... – Picarus
這不是一個答案,你不應該這樣做,它不會工作在不同的情況下......但是:如果你將'Text'和'Graphics'變成虛擬基地,你會得到想要的行爲。 –
@ picarus http://i.imgur.com/879yA.png ........ 你是kerrek,它的工作原理和我的編譯器給了我一些很酷的信息,比如(一個類是佔優勢的) –