Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可访问容器值/变量的子项(框和内容示例)_C++ - Fatal编程技术网

C++ 可访问容器值/变量的子项(框和内容示例)

C++ 可访问容器值/变量的子项(框和内容示例),c++,C++,如果我有一个盒子,里面有一千个项目,我将创建一个名为box的类。然后我在框中有一个方法,它将创建一千个项目 class Box { public: bool isOpen = true; Item *p_boxContents //Create pointer to a thousand Item objects void createBoxContents() { p_boxContents = new Item[1000];

如果我有一个盒子,里面有一千个项目,我将创建一个名为box的类。然后我在框中有一个方法,它将创建一千个项目

class Box
{
public:    
    bool isOpen = true;
    Item *p_boxContents  //Create pointer to a thousand Item objects

    void createBoxContents()
    {
        p_boxContents = new Item[1000];
    }
现在我有了一个Item类。请记住,我将要创建其中许多,我希望它们中的每一个都能访问Box成员变量
isOpen
。如何在不给指向
框的每个“Item”实例化指定指针成员的情况下执行此操作

起初,我是通过使用类继承来实现这一点的,但有人告诉我这是错误的,我知道这种情况更适合于组合领域,而不是继承领域


我才刚开始编程,我已经想了好几天了,有人想给我一个明确的答案吗?

如果没有代码可以从外部访问
项,那么您可以使用
框中的内部类


您可以阅读关于
如何访问
中的成员的内容:

在我的例子中,Box类也需要访问Item类,这是一种相互依赖关系,我读到这一点很好,比如说使用指针。我希望Box调用每个Item对象的“update()”方法,但是为了保持这个示例,假设每个Item对象都有一个布尔变量“isHeavy”,Box类需要访问该变量。不管怎样,我要去看你的链接了。我非常感谢您在这方面提供的帮助。我已经查看了您的链接和另一个示例,但看起来解决方案是在子类中存储对父类的引用。因此,如果你创建了一千个,它们每个都会有一个对父类的引用。我问这个的原因是因为父类被实例化了一次,假设你要实例化很多子类,那将是一个指针,4个字节,乘以数千,但是它们都指向同一个东西。他们没有办法用一个引用或指针指向同一个父类?我还在寻找一种方法,似乎没有。最简单的方法似乎是让每个Item对象都有一个指向父类的指针,并在创建每个“Item”时通过一个循环将指向该框的指针传递给每个“Item”。我脑子里一定有什么东西没了,因为我固执地坚持你不需要一万个指针指向同一个东西,你应该能够在孩子的(更新)方法中指定一个地址。虽然,这可能和有很多指针一样,但我还是很困惑。通过update方法传递引用应该可以。您甚至可以从更新方法中传入
isOpen
,谢谢您的帮助。现在,我将在创建每个子对象时向其传递一个指针,但我不会将此问题标记为已回答,因为我的问题是访问父成员,而不为创建的每个子类创建指针或引用成员。我甚至不知道这是否可能或者是否有意义,但这似乎是一种浪费,我很可能是错的。现在我只需要找到一种方法来实例化一个“新”对象数组,将参数传递给每个构造函数。我已经看到它可以用std向量来实现,但我将尝试用普通数组来实现。谢谢。你应该考虑使用“<代码> STD::vector < /代码>来代替条目。这会让生活更轻松。为什么你总是在句号后加两个空格?事情不是这样的