子类化C ++ Map / Dictionary

时间:2015-01-28 20:39:25

标签: c++ dictionary

我的类继承自地图对象:

这是我尝试实施的方法:

double MyCustomClass::returnValueForKey(string key){
    return this->find(key); //<--- No Viable conversion from iterator
}

我怎样才能让这样的事情发挥作用?

2 个答案:

答案 0 :(得分:2)

要解决获取代码进行编译的机械问题,您只需要取消引用生成的迭代器:

return find(key)->second;

当然这是一个糟糕的解决方案,因为问题本身是从我们已经做出错误选择的位置开始的。

  1. 为什么不简单地使用[]运算符代替此自定义代码?
  2. 为什么甚至首先来自std::map?这是a bad idea,无论问题是什么,几乎肯定有更好的方法来解决它。
  3. 即使此代码是正确的,当地图中不存在key时会发生什么?

答案 1 :(得分:1)

如果您正在谈论的Map对象是std::Map,那么将std::Map对象作为MyCustomClass的成员并以这种方式扩展功能会更好。< / p>

除了可以被认为是主观的一些设计原因之外,这里真正的罪恶是扩展一个没有虚拟析构函数的类。

这意味着当您在其中一个delete对象上调用MyCustomClass时,父类的析构函数将永远不会被调用。