C++ 类的转换(向上转换)

C++ 类的转换(向上转换),c++,class,upcasting,C++,Class,Upcasting,我有一个名为“obj”的类和另一个名为“aggregate”的类 第二个是从第一个派生出来的 类“obj”只包含一个整数。“聚合”没有更多(只有更多的“方法”) 我有一个返回“obj”的函数 我需要将它的结果赋给“aggregate”类的变量 骨料a;a=pop() 我试着这样做: a=static_cast<aggregate>(pop()); a=dynamic_cast<aggregate>(pop()); 要实现多态性,需要使用指针或引用 #include &l

我有一个名为“obj”的类和另一个名为“aggregate”的类

第二个是从第一个派生出来的

类“obj”只包含一个整数。“聚合”没有更多(只有更多的“方法”)

我有一个返回“obj”的函数

我需要将它的结果赋给“aggregate”类的变量

骨料a;a=pop()

我试着这样做:

a=static_cast<aggregate>(pop());
a=dynamic_cast<aggregate>(pop());

要实现多态性,需要使用指针或引用

#include <stdlib.h>

class obj
{
    protected:
        virtual ~obj () {};
        int data;
};

class agregate : public obj
{
    public:
        void actionA () {};
        void actionB () {};
};

obj * pop ()
{
    return new agregate;
}

int main (int argc, char * argv [])
{
    agregate * a = dynamic_cast <agregate *> (pop () );

    return EXIT_SUCCESS;
}
#包括
obj类
{
受保护的:
虚拟~obj(){};
int数据;
};
授权类别:公共obj
{
公众:
无效动作a(){};
无效操作b(){};
};
obj*pop()
{
归还新的土地;
}
int main(int argc,char*argv[])
{
agregate*a=dynamic_cast(pop());
返回退出成功;
}

因为C++中的多态性仅用于指针和引用,不是吗?完成。最小的代表。你的意思是我必须添加我对cast的定义以覆盖这个限制?类似于:#定义值_cast(type,value)((type)(&value))。没有别的办法?你的问题是关于如何解决具体的实际问题,还是关于为什么编译器不那么聪明?我相信你的问题不是关于上转换,而是关于下转换。如果正确,请修改标题并重新标记。@Gustavo Maciel,谢谢您的建议@GustavoMaciel,这是一种悲观情绪,而不是乐观情绪。你甚至不需要向上投射。我的坏,向下投射*,即使你应该使用动态投射,而不是静态投射
a=static_cast<aggregate>(pop());
a=dynamic_cast<aggregate>(pop());
a=*((aggregate*)(&pop()));
#include <stdlib.h>

class obj
{
    protected:
        virtual ~obj () {};
        int data;
};

class agregate : public obj
{
    public:
        void actionA () {};
        void actionB () {};
};

obj * pop ()
{
    return new agregate;
}

int main (int argc, char * argv [])
{
    agregate * a = dynamic_cast <agregate *> (pop () );

    return EXIT_SUCCESS;
}