!!!!!!高分求一疑惑[飞雪、坏、星羽、帅的不敢出门、waizqfor 、独行兄等等,看到请快进]

OenAuth.Core 2009-03-03 09:54:37
废话不多说,问题如下:
设计模式中的状态状态模式:
Model.h

#include <iostream>
using namespace std;

class Work;
class ForenoonState;
class NoonState;

class State
{
public:
virtual void WriteProgram(Work* w)=0;
};

class Work
{
private:
State* current;
public:
double hour;
public:
Work();
void SetState(State* temp)
{
current =temp;
}
void Writeprogram()
{
current->WriteProgram(this);
}

};

class NoonState :public State
{
public:
virtual void WriteProgram(Work* w)
{
if((w->hour)<13)
cout<<"还不错啦"<<endl;
else
cout<<"不行了,还是睡觉吧"<<endl;
}
};

class ForenoonState : public State
{
public:
virtual void WriteProgram(Work* w)
{
if((w->hour)<12)
cout<<"现在的精神无敌好"<<endl;
else
w->SetState(new NoonState());
}
};


Work::Work()
{
current = new ForenoonState();
}

客户端:

#include "Model.h"

int main()
{
Work* mywork=new Work();
mywork->hour=9;
mywork->Writeprogram();
mywork->hour = 14;
mywork->Writeprogram();
return 0;
}


我想的结果应该是:
现在的精神无敌好
不行了,还是睡觉吧


可我在VC6.0里面只出来
现在的精神无敌好

下面一句就是出不来,我断点了很久发现当mywork->hour=14后发现current->WriteProgram(this);这句F11竟然进不了函数,郁闷。不执行
百思不得其解,因看的是C#版的,没C++源代码可参考。
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OenAuth.Core 2009-03-03
  • 打赏
  • 举报
回复
LS两位,我结帖太快,呵呵。另开给分
jia_xiaoxin 2009-03-03
  • 打赏
  • 举报
回复
current->WriteProgram(this);这句F11竟然进不了函数
F11单步可以进入

没有输出"不行了,还是睡觉吧"
是因为你没有执行WriteProgram
  • 打赏
  • 举报
回复
int main()
{
Work* mywork=new Work();
mywork->hour=9;
mywork->Writeprogram();
mywork->hour = 14;
mywork->Writeprogram();
mywork->Writeprogram();

return 0;
}
OenAuth.Core 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lightnut 的回复:]
你改变了state, 却没有输出, 这叫有苦说不出, 谁叫我们是程序员呢:)
试下这个:
class ForenoonState : public State
{
public:
virtual void WriteProgram(Work* w)
{
if((w->hour) <12)
cout < <"现在的精神无敌好" < <endl;
else
{
w->SetState(new NoonState());
w->Writeprogram();
}
}
};
[/Quote]

强,一眼看出问题所在。NND。郁闷
lightnut 2009-03-03
  • 打赏
  • 举报
回复
你改变了state, 却没有输出, 这叫有苦说不出, 谁叫我们是程序员呢:)
试下这个:
class ForenoonState : public State
{
public:
virtual void WriteProgram(Work* w)
{
if((w->hour)<12)
cout<<"现在的精神无敌好"<<endl;
else
{
w->SetState(new NoonState());
w->Writeprogram();
}
}
};

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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