跳出上述問題Making a vector of instances of different subclasses:當實作(指向)不同子類(初始化為vector<Base*>物件)的向量時,我希望能夠根據呼叫的子類訪問正確的成員變數。
下面是示例代碼:
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Entity {
public:
int index;
Entity() {};
virtual ~Entity() {};
virtual void hit() = 0;
};
class Mesh : public Entity {
public:
int index;
Mesh(int x) {this->index=x;};
virtual void hit() {}
};
int main() {
vector<unique_ptr<Entity>> objects;
objects.push_back(unique_ptr<Entity>(new Mesh(35)));
objects.push_back(unique_ptr<Entity>(new Mesh(10)));
for ( int i = 0 ; i < objects.size() ; i )
cout << objects[i]->index << endl;
return 0;
}
我期望的地方
35
10
被列印,同時我得到了。
0
0
在這種情況下如何訪問正確的成員變數值?
uj5u.com熱心網友回復:
問題是由于對繼承的誤解。如果您重新定義Mesh如下,它將按預期作業:
class Mesh : public Entity {
public:
//int index; // No don't redefine: here you'd have two different indexes
Mesh(int x) {this->index=x;};
void hit() override {} // extraa safety: use override instead of virtual to be sure to override
};
在線演示
與問題無關,但還有一些想法:
- 你當然只能使用基類的介面(這里
Entity)。 - 公開曝光會員是不太謹慎的做法
index。更安全的選擇是將其私有化,并通過公共 getter 訪問它。如果索引應該只在構造時設定,物體建構式應該處理它,否則你可以考慮一個公共設定器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450298.html
上一篇:在這種情況下我應該檢查指標嗎?
下一篇:C 嵌套映射:訪問內部映射
