我需要通過使其受到保護從基類中抽象出很多接口,但是我還需要公共訪問一個簡單的祖先類Object
。我可以在沒有對這些祖先的寫/編輯訪問權的情況下協商dreaded diamond,並且仍然只提供基本的API,但是會再次公開Object
的API嗎?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