0
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;
}

我有这个设计问题。两个简单的结构,用于包装在部分代码中直接访问的一些成员(基类的成员比显示的要多)。基类中有一个函数将这些成员聚合在一起。派生类定义了更多成员,函数将这些成员聚合为基类聚合的结果。聚合函数在一个大循环中调用,因此不需要虚函数,这会产生主函数中显示的问题,当调用 foo 时,同一个对象的行为不同(因为在同一个对象基础与派生版本上调用不同的函数) . 我考虑了一些替代方案,例如使用私有继承,如果成员不直接在代码中访问,这将是适当的。

4

0 回答 0