我想知道當你正在執行的對象存儲在類(而不是指針或引用類型)內時,C++中的多態是如何工作的。與類成員對象的多態性
我讀過多態性只會在指針和引用工作,但是我重載< <運營商,這將需要一個參考A.
在我的測試實現這個例子中,我發現它不能按預期工作,並將返回基類字符串(「A」)而不是「B」。
這是因爲對象存儲在類本身?並且運算符參與引用與多態的運作無關? (即因爲它的對象的核心是存儲在類,它不會工作,除非我把它保存在類的指針/參考) 感謝
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();
}
重複:http://stackoverflow.com/questions/4403726/learning-c-polymorphism-and-slicing - 這被稱爲「切片」,與'object_'是一個類成員無關。 – Mat
這就是我正在尋找的術語,歡呼 – Antix