我有一個簡單的代碼,它不能與引用(多態)正確地工作。C++中的多態性無法正確地與引用一起工作
#include <iostream>
#include <string>
class Base {
public:
Base() {}
virtual ~Base() {}
virtual std::string text() const {
return "Base";
}
};
class Derived: public Base {
public:
Derived(Base& _b): b(_b) {}
virtual ~Derived() {}
virtual std::string text() const {
return b.text() + " - Derived";
}
private:
Base& b;
};
int main(int argc, char const *argv[])
{
Base b;
Derived d1(b);
std::cout << d1.text() << std::endl;
Derived d2(d1);
std::cout << d2.text() << std::endl;
return 0;
}
輸出:
Base - Derived
Base - Derived
在輸出的第二行我預計:Base - Derived - Derived
。我閱讀了一些資源和多態性可以很好地與參考和指針一起工作,但在這種情況下,它並沒有。如果我用指針替換引用,它會再次工作。那麼,任何人都可以給我一些解釋?
非常感謝!
看起來你正在調用'Derived'的默認copy-ctor,因爲你從未提供過它。在第二個例子中,默認值比第一個更好(明確的是'Base'類型)。爲了證明這一點,在'Derived(Base&)'中設置一個斷點或輸出一個調試信息。你應該看到它在第二個例子中不被觸發。換句話說,d1只是d2的一個副本。 – WhozCraig