参照 (ポリモーフィズム) では正しく動作しない単純なコードがあります。
#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
私が期待した出力の 2 行目: Base - Derived - Derived
. 私はいくつかのリソースを読み、ポリモーフィズムは参照とポインターで完全に機能しますが、この状況ではそうではありません。参照をポインターに置き換えると、再び機能します。それで、誰か私に説明をしてもらえますか?
本当にありがとう!