当动态分配对象(而不是指针)时,是否可以从超类对象转换为子类?

Aka*_*ash 0 c++

我在命名空间中有一个全局函数,这个函数是一个辅助函数,它将创建对象并返回它们.但是返回类型是父类,但返回的实际对象是父类的子类.然后由用户将其返回"父"对象强制转换为适当的子类.我认为这是多态性的,但我无法将返回的对象强制转换为子类.例如:

class Parent {...};

class ChildOne : public Parent {...};
class ChildTwo : public Parent {...};

Parent my_function(int x) {
    if(x) {
        return ChildOne();
    }
    else {
        return ChildTwo();
    }
};

int main() {
    // The statement below is giving me an error (no matching function call...)
    ChildOne my_child = (ChildOne)my_function(1);
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 6

不,您不能将返回的对象强制my_function转换为子类Parent.

以来:

Parent my_function(int x) {
Run Code Online (Sandbox Code Playgroud)

按值返回对象,它总是返回类的对象Parent,而不是子类.这是由于切片.

有关讨论,请参阅什么是对象切片?