2012-01-20 39 views
1

如果Derived派生自Base,定义一个像这样的转换构造函数是否有意义?转换构造函数,基类作为参数?

Derived(const Base& b) : Base(b) { 
    //... 
} 

Derived拷贝构造函数有问题吗?

我会在这里指定我的意图。我有一个基类和三个派生类。我有存储在列表中的每个派生类的对象,每种类型都有一个对象。 然后我有一个文件,其中一些对象被存储,但作为基类。文件中的一行指示派生类的哪一类对应。 我的代码应该在正确的列表中查看对象是否存在(使用从基类继承的==运算符)。 请告诉我是否还有更好的解决方案。

+0

你是什么你选择这样做的动机吗?是否有你想要的特定行为? – templatetypedef

+0

你确实需要为这个角色创建任何特定的原因吗? – DumbCoder

+0

我有一个基类和三个派生类。从文本文件中。在文件中,对象被存储为基类,但是一行表示它是哪个派生类。然后我需要创建一个“派生”对象。不知道我是否清楚自己,我的英语有问题。 – Pincopallino

回答

0

我对你想在这里实现的东西有点困惑,但是把一个基类对象投射到一个派生类中几乎肯定是一个坏主意。

如果派生类对象的集合存储为基类对象,则不需要“文件中的行”来标识它们实际是哪种类型。只需在基类中定义一个虚函数(例如GetType())并在每个派生类中以不同的方式实现它。或者更好,避免(if(obj.GetType()==)风格的编程只有一个接口,并在每个派生类中提供不同的实现。派生类完全知道它是什么以及可能是顶级代码并不需要知道

0

对底层问题的妥善解决是一个工厂方法:。std::shared_ptr<Base> ReadObject(std::istream&);这种方法可以读取文件的“类型”行,并创建相应类型的对象

相关问题