名称隐藏继承非虚函数的替代方法

时间:2017-09-04 13:47:02

标签: c++ overloading name-hiding

struct Base
{
  int x;
  int foo() const
  {
    return x;
  }
};

struct Derived : Base
{
  int y;
  int foo() const
  {
    return Base::foo() + y;
  }
};

int main(int argc, char **argv) {
  Derived d;
  d.x = 1;
  d.y = 2;
  const Base& b = d;
  std::cout << b.foo() << std::endl;
  std::cout << d.foo() << std::endl;
  return 0;
}

我有这个设计问题。两个简单的结构,用于包装一些成员,这些成员可以直接在代码的某些部分访问(基数比成员更多)。基类中有一个函数将这些成员聚合在一起。派生类定义了更多成员,函数将这些成员聚合到基础聚合的结果中。聚合函数在一个大循环中调用,因此不需要虚函数并且创建main中显示的问题,当调用foo时,相同的对象行为不同(因为在相同的对象库和派生版本上调用不同的函数) 。我已经考虑了一些替代方法,比如使用私有继承,如果成员不是直接访问代码,那么这些替代方法是合适的。是否有其他替代方案来解决这个问题,是否存在其他问题隐藏其他上述问题?

0 个答案:

没有答案