我有一个例子,其中一个对象和一个对象集合的行为相似。所以为了表示这个对象,我有一个类:
class A {
public:
    virtual void foo();
protected:
    int x;
};为了表示对象的集合,我有另一个类:
class Collection: public A {
    void foo(); //override base class function
private:
    vector<A*> aList;
}这很好,但问题是Collection类将有一个我不需要的A::x副本。我不希望类集合继承数据成员。我该如何实现这一点?
注意:我不能编辑"class A“,因为它来自一个库。更正:我无法更改A的接口。A在代码的其余部分中使用。我可以修改实现。如果A::anyFunction()已经不是虚拟的,我可以将它更改为虚拟的。我可以将私有成员更改为protected。
发布于 2016-07-21 19:48:39
您可以使用一个接口:
class AInterface {
public:
    virtual void foo() = 0;
};然后
class A : public AInterface {
     /*...*/
};
class Collection : public AInterface {
     /*...*/
};如果你不能编辑A,你仍然可以通过编写一个包装器来使用这个接口:
class AWrapper : public AInterface {
    void foo() { a.foo(); }
private:
    A a;
};https://stackoverflow.com/questions/38503395
复制相似问题