从子类到具有相同基数的抽象子类的隐式转换
Implicit conversion from child class to abstract child class with the same base
是否可以将派生类隐式转换为具有公共基数的抽象派生类,而无需先强制转换为基数?
例:
class IOBase
{
public:
virtual std::vector<unsigned char> read(int size) = 0;
virtual void write(const std::vector<unsigned char> & data) = 0;
};
// Derived abstract class
class Input : public IOBase
{
private:
using IOBase::write;
};
// File IO derived class
class FileIO : public IOBase
{...}
class FileInput : public FileIO
{
private:
using FileIO::write;
};
void ReadFromInput(Input& input) {...}
void main()
{
FileInput fi;
ReadFromInput(fi); <-- compiler error,
should be first casted to base class IOBase and
then to abstract class Input
FileIO f;
ReadFromInput(f); <-- compiler error
}
请注意,read
和 write
方法不能是常量。
你的FileIO
不是从Input
派生的,所以不仅不能省略强制转换,而且实际上甚至不允许强制转换,因为在你的完整对象fi
的任何地方都没有Input
子对象。
似乎您可能需要虚拟基类:
class Input : public virtual IOBase { /* ... */ };
class FileIO : public virtual IOBase { /* ... */ };
class FileInput : public Input, public FileIO { /* ... */ };
然后,您的通话中就不需要演员表。
相关文章:
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 如何将抽象类的可访问性限制为另一个抽象类及其子类?
- 如何从其抽象母类上的指针初始化子类?
- 使用抽象类的容器来保存子类
- 从子类中的抽象类调用方法
- 从子类到具有相同基数的抽象子类的隐式转换
- 尝试引用子类中的抽象对象时收到编译错误
- 抽象基类的抽象子类
- 在C++中初始化抽象基类的子类数组
- 在抽象类c的子类中使用来自抽象类的引用
- 防止在C++中对抽象类接口进行子类化
- 使用抽象类的子类专门化模板
- 我可以从子类以外的另一个类调用抽象基类的公共赋值运算符吗?
- 如何使用委托来抽象子类中调用基成员的方式
- 视觉 是否可以覆盖子类中的函数C++而无需对抽象的父类中的函数使用 virtual 关键字
- 如何将子类分配给函数中的抽象类指针
- 在超类中调用抽象方法,并在C++中的子类中实现它
- C++方法返回指向抽象类的指针,需要使用来自子类的方法