這個問題在這里已經有了答案: 為什么多型在沒有指標/參考的情況下不起作用? (6 個回答) 如何使用多型從基類訪問派生類向量成員? (1 個回答) 什么是物件切片? (18 個回答) 7 小時前關閉。
所以我有一個 ParentClass 和一個 ChildClass。我有一個矢量物件。我推回了其中的兩個專案,一個 ParentClass newparent 物件和一個 ChildClass newchild 物件。我有一個 for-each 回圈,我想從這個 for-each 回圈中訪問父函式的子版本函式,但我不能。請幫忙。
這是代碼:
#include <iostream>
#include <vector>
using namespace std;
class ParentClass {
public:
int _a;
ParentClass(int a) {
this->_a = a;
}
void print_a() {
cout << "parent a: " << this->_a << endl;
}
};
class ChildClass: public ParentClass {
public:
ChildClass(int a) : ParentClass(a) {}
void print_a(){
cout << "child a: " << this->_a << endl;
}
};
int main(int argc, char const *argv[]) {
int x = 5, y = 6;
vector<ParentClass> objects;
ParentClass newparent(x); objects.push_back(newparent);
ChildClass newchild(y); objects.push_back(newchild);
for (auto obj : objects){
obj.print_a();
}
return 0;
}
我希望它列印出“child a: 6”,但它列印出“parent a: 5”和“parent a: 6”
uj5u.com熱心網友回復:
如果您有一個ParentCLass物件向量,它將ParentClass包含物件。當您添加 時ChildClass,C 將需要應用轉換 -push_back需要ParentCLass const&。找到的轉換是標準的子級到父級的轉換;所以父部件被復制。
這稱為“切片”。您可以創建一個std::vector<std::unique_ptr<ParentClass>>。這不會對物件進行切片,因為向量僅包含指向物件的(智能)指標。
uj5u.com熱心網友回復:
在向量中使用指標或參考以使用多型性,它不適用于副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/317345.html
標籤:C
