向下转换C ++对象

时间:2017-03-28 18:53:17

标签: c++ oop polymorphism

我有一个基类(不是抽象的),它定义了其子类继承的方法。我有另一个程序,它有一个方法,输出基类类型的对象。

class A {
   //methods
};
class B : public A {
   //more methods
};

A function() { //return some instance of A}

我想根据对象A定义函数,然后将它们用于对象B.

B obj = function()

我已经看过动态演员,但这似乎需要我投射指针。有没有办法在不使用指针的情况下向下转换对象实例?

2 个答案:

答案 0 :(得分:2)

没有

你试图给一个它没有的东西。

答案 1 :(得分:1)

  

有没有办法在不使用指针的情况下向下转换对象实例?

你也可以向下转换引用,所以从技术上讲你不需要指针。

如果派生类型具有转换构造函数,则可以将基类对象转换为派生类型。例如,您可以复制构造基础子对象:

struct B : A {
   B(const A& a): A(a) {}
};
// ...
B obj = function();

但是,这不是“向下转换”,这是“将基类的引用转换为其派生类之一的行为。”(引用来自wikipedia,强调我的)。在引用的上下文中,引用是一个更通用的术语,包含引用,指针和其他间接。