在这里不知所措,希望有人能提供帮助。
我有以下类结构。
一个基类房间,有两个子类Kitchen
和livingRoom
。
我的基类中有一个向量
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
并添加到向量中。回到Game
课堂。我进入livingRoom
类,当我访问向量时,是空的吗?我在这里错过了什么?
类数据不会在子类的不同实例之间共享。每个子类都是基类的不同实例,并且实际上包含基类的一个不同实例。
所以Kitchen
有pocket
,livingRoom
有另一个pocket
.添加到Kitchen
pocket
的东西不会添加到LivingRoom
的口袋里。
相反,您应该考虑制作另一个类来表示在房间之间移动的实体,并让此实体类包含pocket
。无论实体在哪个房间,它始终具有相同的pocket
。
也回避动态分配std::vector
。它们旨在消除管理动态分配的所有责任,因此动态分配vector
只会使其中一些管理职责重新发挥作用,没有任何好处。