c++将派生类分配给基类的更好方法

标签 c++ polymorphism

这似乎是一个愚蠢的问题,但我希望能够在一行中实例化派生类并将其分配给基类:

class A { };
class B : public A { };

// i can do this
A *base;
B derived;
base = &derived;

// i'd like to do something like this
A *base;
base = &B(); // produces a warning: taking address of temporary

我试图在不使用 new 运算符的情况下获得多态行为。我认为编译器正在插入对构造函数返回值的临时引用。是否可以指示编译器我实际上想使用该地址进行分配?

* 编辑

这里有一点背景。解析 xml 文件时,我有这样的事情:

class element { virtual void load_xml(...); };
class city : public element { ... };
class state : public element { ... };

element *base;
// read some xml

if (xml_node == "city") {
  base = &city(); 
} else if (xml_node == "state") {
  base = &state();
} 

base.load_xml(...);

这个想法是每个派生节点都知道如何水化自己,并将覆盖 load_xml() 函数来这样做。我想我真正应该做的是在每个 if block 中调用 load_xml,而不是尝试将每个派生类分配给基类,然后在最后从基类调用 load_xml。

谢谢!

最佳答案

I want to be able to instantiate a derived class and assign it to a base class in one line

在单行中实例化的对象(不使用 new 运算符)只会持续到对其求值的表达式结束。因此,当您获得地址时,临时地址已不存在。

I'm trying to get polymorphic behavior without using the new operator.

为此,您需要一个命名变量来为您的对象提供有效的生命周期。

关于c++将派生类分配给基类的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830918/

相关文章:

c++ - For-Loop a "Empty"Vector with negative iterator?

c++ - 如何拦截 I/O 端口访问以实现硬件虚拟化

c++ - 在 g++ 中使用 -pass-exit-codes 时出现意外退出状态

java - SWIG Java 保留从 C++ 弹回的对象的类信息

c++ - 多态性和指向数组的指针

c++ - 为什么派生类中的重写函数会隐藏基类的其他重载?

python - 在 python 和 c++ 之间管道传输二进制数据

c++ - 如何使用默认值初始化固定长度的 std::pair 的 std::vector ?

c++ - 如何从多态层次结构中的基类引用调用子类的成员

java - 具有嵌套在对象中的类型属性的 Jackson 多态反序列化