这似乎是个简单的问题,但我希望能够在一行代码中实例化派生类并将其赋值给基类:
我希望在不使用new运算符的情况下实现多态行为。我认为编译器会插入对构造函数返回值的临时引用。是否可能告诉编译器我实际上想要使用该地址进行赋值? * 编辑 这里是一些背景信息。在解析xml文件时,我的代码大致如下:
每个派生节点知道如何使自己保持水分,并将重写 load_xml() 函数以实现此目的。我想我真正应该做的是在每个 if 块中调用 load_xml 而不是尝试将每个派生类分配给基类,然后在最后从基类调用 load_xml。谢谢!
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 块中调用 load_xml 而不是尝试将每个派生类分配给基类,然后在最后从基类调用 load_xml。谢谢!
A * p = new B();
吗? - Kerrek SB