2个类可以共享一个结构吗?

时间:2014-11-11 19:44:54

标签: c++

假设我有2个类FooCookBook是一个结构。

以前Book是一个全局变量,我想将其更改为Foo所有,以便我可以拥有许多FooBook

Cook读取Book,但Foo会不时更新Book的值。

我测试的以下代码不起作用。我是C ++的新手,我不明白为什么这不起作用。

class Foo {
private:
    Book book;
    Cook cook;
public:
    Foo();
    virtual ~Foo();
};

class Cook {
private:
    Book * book;
public:
    Cook();
    virtual ~Cook();
    void setBook(Book * book);
};

然后在Foo的构造函数中有一个:cook.setBook(&book);

1 个答案:

答案 0 :(得分:1)

你正在做的事情应该可以正常工作,虽然我对你应该使用std::shared_ptr的{​​{3}}表示同意。

如果您发现自己的值不同步,则可能是您已覆盖Foo.book,但该更改尚未传播到Foo.cook.book

可能更好的设计是:

class Foo {
private:
    Book book;
    Cook cook;
    Book& getBook();
public:
    Foo() : cook(std::bind(getBook,this));
    virtual ~Foo();
};

class Cook {
private:
    std::function<Book&()> _memfunptr;
public:
    Cook(std::function<Book()> memfunptr): _memfunptr(memfunptr);
    virtual ~Cook();
};

在此处,只要您想在[{1}}内引用Foo.book,就可以使用Foo.cook来访问它。

作为一个注释,你们中的一些问题可能与课程实施有关?您应该在每个Cook._memfunptr范围的末尾添加分号,并且应该定义class构造函数Cook 而不是 Cook();