gpt4 book ai didi

C++ 多重继承、基类可见性和可怕的菱形。将祖先基类重新公开为公共(public)?

转载 作者:行者123 更新时间:2023-11-30 03:04:30 25 4
gpt4 key购买 nike

我需要通过保护基类从基类中抽象出大量接口(interface),但我还需要对简单的祖先类 Object 进行公共(public)访问。我可以协商 dreaded diamond没有对这些祖先的写入/编辑权限,仍然只提供基本 API,但再次公开 Object 的 API?

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());
}

最佳答案

你可以使用组合。

您可以将 ComplicatedOne 的实例作为成员,并公开您需要的内容。

这样您就可以保护它,但永远不会出现钻石情况。

此外,如果 ComplicatedOne 是一个 Object,那么 Line 是一个 Object 继承,所以你不' 需要再次继承。

关于C++ 多重继承、基类可见性和可怕的菱形。将祖先基类重新公开为公共(public)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com