我在正确获取派生类的副本时遇到问题,但是在基类列表上工作。
所以我有简单的基类CBase
,几乎没有变量和CDerived : CBase
派生类还有其他一些变量,它是重写基类方法Copy()
,以返回具有相同变量值的自身新实例。 (我有更多从CBase继承的类)
例如,我正在处理List<CBase> CList
的执行方法列表GetCopyOfFirst()
做return CList[0].Copy();
然后看起来list元素仅使用基本方法。
(它创建新实例,但派生类变量具有初始值,例如不会发生对Copy()的重写,仅对base.Copy()“)
当我执行CDerived other = ... // Some reference
CDerived d = other.Copy();
时它就起作用了。
如何通过处理基类类型来执行派生类的东西?我可以吗?
您应该override
派生类中的方法定义,而且,它应该在基类中声明为虚函数,以具有所需的功能。您可能将方法定义为常规定义。因此,派生类中的复制方法将隐藏基本复制方法,而不是覆盖它。这就是为什么当您从基本指针调用时,将执行基类的copy方法。