转换构造函数,基类作为参数
conversion constructor, base class as a parameter?
如果Derived
派生自Base
,那么定义这样的转换构造函数有意义吗?
Derived(const Base& b) : Base(b) {
//...
}
Derived
复制构造函数是否存在问题?
我将在这里详细说明我的意图。我有一个基类和三个派生类。我将每个派生类的对象存储在列表中,每个类型一个。然后我有一个文件,其中存储了一些对象,但作为基类。文件中的一行指示派生类的对应类型。我的代码应该在正确的列表中查看对象是否存在(使用从基类继承的==运算符)。请告诉我是否还有更好的解决方案。
我对您在这里试图实现的目标有点困惑,但将基类对象转换为派生类对象几乎肯定是个坏主意。
如果有一个派生类对象的集合存储为基类对象,则不需要"文件中的一行"来标识它们的实际类型。只需在基类中定义一个虚拟函数(例如GetType()),并在每个派生类中以不同的方式实现它。或者更好的是,为了避免(if(obj.GetType()==)风格的编程,只需要一个接口,并在每个派生类中提供不同的实现。派生类非常清楚它是什么,而您的顶级代码可能不需要知道。
底层问题的正确解决方案是工厂方法:std::shared_ptr<Base> ReadObject(std::istream&);
。此方法可以从文件中读取"type"行,并创建适当的类型对象。
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 命名参数习惯用法和(抽象)基类
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 如何允许模板参数中的类类型,仅当它有两个基类时
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- 根据参数数调用 mixin 基类的构造函数
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- C++ 如何使派生类自动获取基类参数
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 如何隐藏模板基类的参数类型
- 根据模板参数引用不同基类的函数
- 继承基构造函数,基类是模板参数 (MSVC)
- C++ 模板:重载时找不到基类类型参数方法
- 是否可以从构造函数自动推断基类模板参数?
- 如何在 C++ 中将参数传递给基类构造函数
- 如何使用 CRTP 创建具有基类的可选模板参数