這似乎是一個愚蠢的問題,但我希望能夠實例化一個派生類,它在同一行分配給基類:C++派生類分配給一個基類更好的辦法
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
我試圖在不使用新運算符的情況下獲得多態行爲。我認爲編譯器正在爲構造函數的返回值插入一個臨時引用。是否可以指示編譯器確實要將該地址用於分配?
*編輯
這裏有一個小範圍內。我有這樣的事情解析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。
謝謝!
在VS2010中沒有警告。你正在使用哪種編譯器? –
我想大部分你說的或者你想要的東西都沒有意義。你能退一步說出你需要解決什麼問題嗎?你的意思是說'A * p = new B();'? –
@phillip gcc 4.5.2是我正在使用的編譯器 – JaySilk84