我有父類:地圖存儲派生的對象
class Data
{
public:
Data (void) { }
Virtual int Size (void)
{
return 100;
}
protected:
map<string, Data*> m;
};
類從類繼承的數據:
class Struct : public Data
{
public:
Struct (void) { }
Struct & Add (const string & name, Data x)
{
Data * tmp = new Data (x);
m[name] = tmp;
return *this;
}
void Print (void)
{
for (const auto & tmp : m)
cout << tmp . first << " " << tmp . second -> Size() << endl;
}
};
class IntData : public Data
{
public:
IntData (void) { }
int Size (void)
{
return 4;
}
};
class DoubleData : public Data
{
public:
DoubleData (void) { }
int Size (void)
{
return 8;
}
};
主:
int main (void)
{
Struct a;
a . Add ("Integer",IntData());
a . Print();
return 0;
}
Current output : Integer 100
Expected output : Integer 4
我想創建一個映射,它可以存放從Data類派生的各種類型的對象。但是當我想調用方法大小存儲對象在映射(在這種情況下IntData)應該返回4它總是從父類數據返回值。我該如何解決這個問題?
你'Data'類需要虛析構函數。但更重要的是,多態只有在引用或指針作爲參數時才起作用。你的'Add'函數傳遞一個對象。谷歌「對象切片」。另外,發佈真正的代碼,因爲'虛擬'不是關鍵字。 – PaulMcKenzie