在这里不知所措希望有人能帮助..
我有以下类结构。
一个基类 Room,有两个子类 Kitchen
和 livingRoom
。
我的基类中有一个 vector
Room::Room()
{
up = nullptr;
down = nullptr;
left = nullptr;
right = nullptr;
pocket = new vector<string>;
}
定义为:
void Room::addPocket(string item)
{
char emptyPocket;
if (pocket->size()==1)
{
emptyPocket = 'N';
}
if(pocket->size()<1)
{
pocket->push_back(item);
cout << "Item added to pocket" << endl;
}
else
{
cout <<"Your pocket is full" << endl;
cout <<"Would you like to empty your pocket? 'Y' or 'N'" << endl;
cin >> emptyPocket;
if(emptyPocket == 'Y' || emptyPocket == 'y')
{
pocket->clear();
cout <<"You have emptied your pocket." << endl;
}
}
}
而我的程序功能如下。我有另一个类 Game
,其中发生以下情况。我进入 child
类 Kitchen
并添加到 vector 中。回到 Game
类。我进入 livingRoom
类,当我访问 vector 时,是空的吗?我在这里错过了什么?
最佳答案
子类的不同实例之间不共享基类数据。每个子类都是并且有效地包含基类的一个不同实例。
所以 Kitchen
有一个 pocket
而 livingRoom
有另一个 pocket
。添加到Kitchen
的pocket
的东西不会添加到LivingRoom
的口袋。
相反,您应该考虑创建另一个类来表示在房间之间移动的实体,并让该实体类包含 pocket
。无论一个实体在哪个房间,它总是有相同的口袋
。
也避免动态分配 std::vector
。它们旨在消除管理动态分配的所有责任,因此动态分配一个 vector
只会让一些管理责任重新发挥作用而没有任何好处。
关于C++ 子类不能访问其他子类 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44487302/