操作しているオブジェクトがクラス内に (ポインターまたは参照型としてではなく) 格納されている場合、C++ のポリモーフィズムがどのように機能するのか疑問に思っています。
ポリモーフィズムはポインターと参照でのみ機能することを読みましたが、A への参照を受け取る << 演算子をオーバーロードしました。
私の実装でこの例をテストしたところ、期待どおりに動作せず、「B」ではなく基本クラスの文字列 (「A」) が返されることがわかりました。
これは、オブジェクトがクラス自体の中に格納されているためですか? 参照を受け取る << 演算子は、ポリモーフィズムの働きとは何の関係もありませんか? (つまり、オブジェクトのコアはクラスに格納されているため、クラスにポインタ/参照として格納しない限り機能しません)ありがとう
class Test {
public:
void Run() {
object_ = B();
std::cout << object_ << std::endl;
}
private:
A object_;
};
Class A {
// Assume this is already implemented. All it does it add obj.getType()
// to stream
friend ostream& operator<<(ostream& stream, A obj);
public:
virtual std::string getType() {
return std::string("A");
}
};
Class B : public A {
public:
std::string getType() {
return std::string("B");
}
};
int main(int argc, char* argv[]) {
Test test = Test();
test.Run();
}