我有一个基类(不是抽象的),它定义了其子类继承的方法。我有另一个程序,它有一个方法,输出基类类型的对象。
class A {
//methods
};
class B : public A {
//more methods
};
A function() { //return some instance of A}
我想根据对象A定义函数,然后将它们用于对象B.
B obj = function()
我已经看过动态演员,但这似乎需要我投射指针。有没有办法在不使用指针的情况下向下转换对象实例?
答案 0 :(得分:2)
没有
你试图给一个它没有的东西。
答案 1 :(得分:1)
有没有办法在不使用指针的情况下向下转换对象实例?
你也可以向下转换引用,所以从技术上讲你不需要指针。
如果派生类型具有转换构造函数,则可以将基类对象转换为派生类型。例如,您可以复制构造基础子对象:
struct B : A {
B(const A& a): A(a) {}
};
// ...
B obj = function();
但是,这不是“向下转换”,这是“将基类的引用转换为其派生类之一的行为。”(引用来自wikipedia,强调我的)。在引用的上下文中,引用是一个更通用的术语,包含引用,指针和其他间接。