Могут ли 2 класса совместно использовать одну структуру?

0

Предположим, у меня есть 2 класса Foo и Cook, а Book - это структура.

Ранее Book - глобальная переменная, и я хотел бы изменить ее на принадлежность Foo чтобы у меня было много Foo с их собственной Book.

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);

  • 2
    «Не работает» означает, что именно?
  • 0
    Компилируется, но дает неверный расчет. Поэтому я думаю, что книга, когда к ней обращается Кук, не отражает обновленную ценность.
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

То, что вы делаете, должно работать нормально, хотя я не могу согласиться с тадманом, что вы должны использовать std::shared_ptr.

Если вы видите, что ваши значения не синхронизированы, вероятно, вы перезаписали 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();
};

Отсюда в любое время, когда вы захотите обратиться к Foo.book внутри Foo.cook вы можете просто использовать Cook._memfunptr для доступа к нему.

В качестве примечания здесь некоторые из вас могут быть связаны с реализацией класса? У вас должна быть точка с запятой в конце каждого class, и вы должны быть конструктором Cook должен быть определен Cook(); не Cook cook; ,

  • 0
    Спасибо! Я обновил опечатку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню