House
メンバー変数をそれ自体で作成するため、全体としてm_room
は問題ありません。インスタンス化後に消費者が何かを呼び出す必要はありません。これは、アイテムがインスタンス化された直後に使用できるというパターンに従います (部屋の設定などの特別なアクションは必要ありません)。
私はいくつかのマイナーなピッキングを持っています:
class Room
{
public:
// virtual method to allow overriding
virtual void ColorRoom(){};
};
class House
{
public:
// Returning a non-const pointer in C++ is typically a bad smell.
const Room& Room() const { return m_room; }
// Allow for assignment and manipulating room, but breaks const-ness
Room& Room() { return m_room; }
// Facade method for houses with more than one room
// You can forward parameters or come up with room-painting schemes, but you should
// not require that a House has a Room called Room().
virtual void ColorAllRooms()
{
m_room.ColorRoom();
}
private:
Room m_room;
};