关于一种设计的疑问,( OOD/A , DP )

madmanahong 2005-11-13 01:45:34
现在有一个类的派生体系.

class A
{

public:
enum {
STATE_NORMAL,
STATE_DESTROY,
};

private:
INT m_nState;

public:
VOID SetState( INT nState );

};

class B : public A
{

};

class C : public B
{

};


如上,基类A中有一个表示该对象状态的变量,和一些表示状态的枚举.
并且基类A仅仅有两种状态,普通和死亡状态。


但是在子类B中,有可能拥有另一种状态STATE_B.
同样在子类C中,有一种状态STATE_C。

假如,从这个类的派生体系生成的对象在某个时刻仅仅有一中状态。
我该怎么做?

如果我对这些状态进行分段,貌似可以解决这些问题,可是就需要
用户(派生者)自己去定义这些区段。很麻烦。


那么请问,我如何将其进行规划,毕竟子类,拥有自己的状态是一种很正常的事情。
我该怎么做更好一些呢〉

望不吝赐教。
致谢~


...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
madmanahong 2005-11-14
  • 打赏
  • 举报
回复
class A
{

public:
enum {
STATE_NORMAL,
STATE_DESTROY,
};

private:
INT m_nState1;

public:
VOID SetState( INT nState );

};

class B : public A
{
enum{
S_B;
};
INT m_nState2;

getState( );
};

class C {
S_C

m_nstate3
};

C
madmanahong 2005-11-14
  • 打赏
  • 举报
回复
hjunxu(hjun) ,你真幽默:)

假如我除了需要表示这个物体生存期的状态。
而需要一个物体是否在飞行中的状态又该怎么办?
hjunxu 2005-11-14
  • 打赏
  • 举报
回复
那么搂主索性不要表示状态的变量的成员了,用一个int nLife来代替. nlife=0就表示死亡。
madmanahong 2005-11-13
  • 打赏
  • 举报
回复
关于你的添

// 添

这样有2个问题,1。基类便知道了子类的状态.
假设派生了一个类D

public D : public C
{

};

D又有一个自己的状态,那么你需要在A中添加。
那么真个系统都需要重新编译(产生问题2)。



关于你的
// 改

当然是private的,这个状态子类是不能访问的。
因为SetState中需要做一个处理,譬如我对SetState进行了监听( 订阅/发布模式 ),
如果子类没有通过接口而直接修改变量,那么我就没有办法得到状态的改变了。


//...
property1 2005-11-13
  • 打赏
  • 举报
回复
class A
{

public:
enum {
STATE_NORMAL,
STATE_DESTROY,
s_B , // 添
s_C,
};

protected : // 改
INT m_nState;

public:
VOID SetState( INT nState );

};

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧