【发布时间】:2014-12-20 20:25:11
【问题描述】:
我有两个类 Foo 和 Bar 有多余的成员。我想要一个包含两种类型的成员的第三类 FooBar,我可以将它们传递给期望任何一种类型的函数(可能带有强制转换),并且没有所有东西的两个副本。
class Foo{
public:
A a;
B b;
C c;
};
class Bar{
A a;
B b;
D d;
};
class FooBar{
A a;
B b;
C c;
D d;
};
在 c++ 中,是否可以在不修改使用 A 或 B 的代码(或最多更改代码期望的类型)并且不制作无关副本或保留冗余数据的情况下执行此操作?简单继承避免重复数据。拥有一个公共基类和虚拟继承可以在 clang 下编译,但似乎不起作用。
【问题讨论】:
-
使用联合怎么样?
-
如果您想将
FooBar传递给需要Foo或Bar的函数,您将需要使用继承。 -
我认为设计有缺陷。类应该建模行为而不仅仅是数据。
-
@Pradhan:工会会破坏这里的东西。
-
@Cornstalks 啊,我误读了这个问题,没有意识到他想要一个
Foo和Bar的集合论联合 :)
标签: c++ inheritance