在这里不知所措,希望有人能帮忙..
我有以下类结构。
包含两个子类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
类,当我访问向量时,它是空的?我在这里缺少什么?
答案 0 :(得分:1)
不同子类实例之间不共享基类数据。每个子类都是并且有效地包含基类的不同实例。
因此Kitchen
有pocket
而livingRoom
有另一个pocket
。添加到Kitchen
的{{1}}的内容未添加到pocket
的口袋中。
相反,您应该考虑创建另一个类来表示在房间之间移动的实体,并让此实体类包含LivingRoom
。无论实体在哪个房间,它总是具有相同的pocket
。
还要回避动态分配pocket
。它们旨在消除管理动态分配的所有职责,因此动态分配std::vector
只会使一些管理职责重新发挥作用而无益。