我需要将一个类强制转换为其 protected 基类:
class ComplicatedOne : public Object {
//Lots of funcs I don't want or need.
};
class Line : protected ComplicatedOne {
//Some funcs of ComplicatedOne get re-implemented or called by alias here
};
class Array {
void Add (Object &obj);
};
main() {
Array a;
a.Add(new Line());
}
我需要将 Line
添加到 Array
但 Object
基不可见。我应该公开地重新实现它的方法,还是有一个我可以覆盖的隐式转换运算符?
最佳答案
有了这个,您就告诉编译器您不能将 Line
隐式转换为 Object
:
class Line : protected Object {
};
但在我看来,你想这样做,而且你应该这样做。所以把遗产公之于众。这是一个设计问题。
不要为了让基类中的方法protected
而使继承protected
。
另一种选择是在行中实现转换运算符:
class Line : protected Object
{
public:
operator Object&();
};
然后像这样调用函数:
a.Add(Line());
代替
a.Add(new Line());
在这种情况下,您不能隐式转换指针。但是我建议更改继承类型。
关于C++,如何将派生类转换为 protected 基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558998/