我有父类:地图存储派生的对象
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