總的來說,你很好,因爲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