【问题标题】:C++ Child class can't access other child class vectorC++子类不能访问其他子类向量
【发布时间】:2017-06-11 18:32:53
【问题描述】:

在这里不知所措希望有人可以帮助..

我有以下类结构。

一个基类 Room 有两个子类 KitchenlivingRoom

我的基类中有一个向量

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,发生以下情况。我进入childKitchen 并添加到向量中。回到Game 班级。我进入livingRoom 类,当我访问向量时,它是空的吗?我在这里错过了什么?

【问题讨论】:

  • 为什么:pocket = new vector&lt;string&gt;; ??
  • 请提供一个minimal reproducible example 来重现您的问题。
  • 扩展上面的评论,你几乎不想动态分配std::vector。动态分配的向量将部分内存管理责任重新推给了程序员,并且首先使使用vector 的点失去了大约一半。
  • "pocket = 新向量;" - 为什么?为什么不只是一个普通的成员vector??

标签: c++ class vector


【解决方案1】:

子类的不同实例之间不共享基类数据。每个子类都是并有效地包含基类的不同实例。

所以Kitchen 有一个pocketlivingRoom 有另一个pocket。添加到Kitchenpocket 的内容不会添加到LivingRoom 的口袋中。

相反,您应该考虑创建另一个类来表示在房间之间移动的实体,并让该实体类包含pocket。无论实体在哪个房间,它总是有相同的pocket

还避免动态分配std::vectors。它们旨在消除管理动态分配的所有职责,因此动态分配vector 只会让其中一些管理职责重新发挥作用,而没有任何好处。

【讨论】:

    猜你喜欢
    • 2015-02-05
    • 2016-10-25
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多