【发布时间】:2016-11-26 18:26:05
【问题描述】:
我对 C++ 中的子类有些怀疑。我有这个代码:
class BaseClass() {
BaseClass();
void doSomething();
}
class SubClass : public BaseClass {
SubClass();
void doSomething();
}
当我声明一个可能是子类的 BaseClass 对象时,我会调用子构造函数...
BaseClass foo = SubClass();
然后我需要 foo 使用派生类的 doSomething() 方法,但是当我这样做时......
foo.doSomething();
它使用父类方法而不是派生方法。我试过了,但它不起作用:
foo.SubClass::doSomething();
有什么方法可以做到吗,或者我不得不用“SubClass”类型声明对象以使其使用自己的功能?
【问题讨论】:
-
virtual void doSomething();?? -
BaseClass foo = SubClass();--foo是BaseClass类型的对象,而不是SubClass。这是对象切片的示例。并且标记doSomething()virtual 不会改变这一点。 -
是的,正如 Pete Becker 所说,这似乎是一个对象切片问题,所以将函数设为虚拟并不能解决问题......解决这个问题的唯一方法是将 foo 显式声明为 SubClass 类型,不是吗?
标签: c++ inheritance polymorphism object-slicing