我遇到了我的類的問題,將一個const對象(多態結構)傳遞給一個顯式構造函數,該函數將const引用傳遞給基類那種多態結構。 這裏是樣品(這是不是從我的代碼,它是解釋在這裏)明確傳遞一個const對象到一個構造函數,該構造函數接受一個多態類的const引用
class Base
{
...
}
class Derived:public Base
{
...
}
class Problem
{
Problem(const Base&);
...
}
void myFunction(const Problem& problem)
{
...
}
int main()
{
//explicit constructor with non const object
Derived d;
Problem no1(d); //this is working fine
myFunction(no1);
//implicit constructor with const object
Problem no2=Derived(); //this is working fine, debugged and everything called fine
myFunction(no2); //is working fine
//explicit constructor with const object NOT WORKING
Problem no3(Derived()); //debugger jumps over this line (no compiler error here)
myFunction(no3); //this line is NOT COMPILING at all it says that:
//no matching function for call to myFunction(Problem (&)(Derived))
//note: candidates are: void MyFunction(const Problem&)
}
它似乎是工作的罰款與第二版(顯式的構造函數調用的問題),只有當我明確投的派生類對象其基類作爲它的基礎,如:
Problem(*(Base*)&Derived);
我不知道叫impicitly和明確的問題類的構造函數之間的差別。 謝謝!
您在第二類聲明中切換了「基本」和「派生」。這是一個錯字嗎?另外,即使在沒有優化的'Debug'配置文件中編譯時,「調試器跳過這一行」的註釋是否適用? –
您正在創建基類的對象並將它們傳遞 - 您不會獲得多態行爲。您需要一個引用或指向基類的指針才能獲得所需的行爲。鑄造不是一個解決方案。 – dirkgently
該參數是const引用,所以有多態行爲的參考。 – user265149