У меня есть случай, когда объект и коллекция объектов ведут себя одинаково. Таким образом, чтобы представлять объект У меня есть класс:Как использовать состав и наследование вместе?
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, которая мне не нужна. Я не хочу, чтобы класс Collection наследовал члены данных. Как мне это достичь?
Примечание: Я не могу редактировать «класс А», потому что это из библиотеки. Коррекция: я не могу изменить интерфейс A. A используется в остальной части кода. Я могу изменить реализацию. Я могу изменить A :: anyFunction() на виртуальный, если он уже не является виртуальным. Я могу изменить приватный член для защиты.
' Коллекция :: x' и 'A :: x' - это тот же' x'. – LogicStuff
Я понимаю это. Но я не хочу, чтобы этот член данных был в классе Collection. –
Можете ли вы отредактировать функции, ожидающие полиморфного 'A'? – StoryTeller