总的来说,你很好,因为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;
};
这很好,对于一个简短的解释,请参阅我的答案。 – 2010-01-26 18:49:29
请注意,'virtual'是指*覆盖*而不是*重载*。 – Dario 2010-01-26 18:58:49
你可以重写一个没有继承的函数吗?其次,如果用户希望修改房间看起来像他们需要调用房屋的方法,反过来会调用房间的方法,类似于委托。 – 2010-01-26 19:02:17