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 时,同一个对象的行为不同(因为在同一个对象基础与派生版本上调用不同的函数) . 我考虑了一些替代方案,例如使用私有继承,如果成员不直接在代码中访问,这将是适当的。