Мне нужно отвлечь много интерфейса от базового класса, сделав его защищенным, но мне также нужен открытый доступ к классу простых предков Object
. Могу ли я договориться о dreaded diamond без права на запись/редактирование этих предков и по-прежнему представлять только базовый API, но еще раз обновить API Object
?C++ Множественное наследование, видимость базового класса и страшный алмаз. Повторное выставление базового класса предков как общедоступное?
class Object {
virtual bool Equals (const Object &obj) const;
virtual int GetHashCode (void) const;
};
class ComplicatedOne : public Object {
//Lots of funcs I don't want or need.
};
class Line : protected ComplicatedOne, public Object {
//Some funcs of ComplicatedOne get re-implemented or called by alias here
public:
virtual bool Equals(const Object &obj) const {
return Object::Equals(obj);
}
virtual int GetHashCode() const {
return Object::GetHashCode();
}
};
class Array {
void Add (Object &obj);
Object *GetAt (int i);
};
main() {
Array a;
a.Add(new Line());
}
Правда, я собираюсь ОО безумно с наследованием, когда требуется композиция. – John