如何将派生类强制转换为受保护的基类
C++, how to cast derived class to protected base?
我需要将一个类强制转换为其受保护的基类:
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 {
};
但在我看来,你想这样做,而且你应该这样做。所以将继承设为public。这是一个设计问题。
不要仅仅为了保持方法在基类protected
中而继承protected
。
另一个选项是在Line:
中实现强制转换操作符class Line : protected Object
{
public:
operator Object&();
};
并像这样调用函数:
a.Add(Line());
不是a.Add(new Line());
在这种情况下不能隐式强制转换指针。但是,我建议更改继承类型。
只有Line
的友元和子类可以执行此强制转换。你可以这样做:
class Line : protected Object {
friend class Array;
};
class Array {
public:
template<class T>
void Add (T &obj) {
add_impl(obj); // cast is accessible here, because Array is a friend
// of Line
}
private:
void add_impl(Obj &obj);
};
您不必在这里使用函数模板,但我假设您有更多以这种方式从Object
派生的类,因此模板将在这里有所帮助。
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 公共/私有/受保护是否会更改内存中结构的排列?
- 在父类中公开受保护的构造函数
- 如何从其他结构访问受保护的结构变量
- 如何实现返回受保护结构的私有函数
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 从模板化父类中的派生内部类访问受保护的成员变量
- 为什么继承的受保护构造函数不能公开?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- C++中的受保护变量
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 将对象强制转换为派生类以访问父类的受保护成员
- 如果我使用强制转换访问受保护的成员,可能会出现什么问题?
- 我可以安全地转换为兄弟类来包装受保护的函数吗
- 使用dynamic_cast向上转换到受保护的基
- 模板化转换构造函数无法访问受保护的数据成员
- 如何将派生类强制转换为受保护的基类