用行为将对象归类
黄国强 2017/12/19
学习C++从封装开始。那么封装什么呢?当然是封装数据还有操作这些数据的函数。由于经常封装数据,很多开发者会默认建立这个观念,即:封装就是封装数据。事实上这个观念是错误的。
举一个地铁闸机的例子。
闸机有两种状态,可以通过和不可以通过。有两种设计方案。
黄国强 2017/12/19
学习C++从封装开始。那么封装什么呢?当然是封装数据还有操作这些数据的函数。由于经常封装数据,很多开发者会默认建立这个观念,即:封装就是封装数据。事实上这个观念是错误的。
举一个地铁闸机的例子。
闸机有两种状态,可以通过和不可以通过。有两种设计方案。
设计方案1:
class CGate
{
public:
CGate(void);
~CGate(void);
protected:
bool m_bPass;
};
设计方案2:
class CGate
{
public:
CGate(void);
virtual ~CGate(void);
};
class CGatePass : public CGate
{
public:
CGatePass (void);
virtual ~CGatePass (void);
};
class CGateNoPass : public CGate
{
public:
CGateNoPass (void);
virtual CGateNoPass(void);
};
上述两个方案中,方案2是更能体现面向对象的思想,而且,方案2中的三个类中都没有数据成员,三个类封装的是行为。
还有一种情形,就是几个类的数据成员完全一致,但是行为完全不同,这种情况也是体现封装行为的思想。