构造函数和析构函数 - C++
我需要编写一个程序,在屏幕上随机打印100个星星,然后星星慢慢消失 - 一个接一个。我不允许使用循环或递归。我试图玩弄构造函数和析构函数,但我不能让星星一个接一个消失(而不是所有的一起)。 任何想法?构造函数和析构函数 - C++
感谢, 李
对不起 - 忘了提我使用C++
我现在的访问违反无用代码:
class star {
int x;
int y;
public:
star(){
x = rand()%80;
y = rand()%80;
PaintcharOnRandomLocation('*',x,y);
};
~star(){
PaintcharOnRandomLocation(' ',x,y);
};
};
class printAll{
star* arr;
public:
printAll(){
arr = new star[100];
};
~printAll(){
delete[] arr;
};
};
void doNothing(printAll L){
};
void main()
{
srand (time(NULL));
doNothing(printAll());
getch();
};
似乎只是可能没有循环的方式/递归这样的事情:
class Star
{
Star()
{
//constructor shows star in a a random place
}
~Star()
{
//destructor removes star and sleeps for a random amount of time
}
};
int main()
{
Star S[100];
}
这个我因为编译器必须运行每颗恒星的构造函数来初始化数组,然后再初始化每个恒星的析构函数,因为它超出了范围。
这也是一个坏的窍门,因为所有在主函数中运行的工作都是不透明和不可见的。在这种情况下使用循环显然会更好,并将延迟放入像这样的析构函数中是非常令人困惑和难以维护的。
根据你的最终评论,你可以让你的star
类的析构函数延迟吗?例如参见sleep
或usleep
的功能。
由于析构函数/构造函数只是一个想法,它们可能不是您的问题的正确标题。 我不知道你在什么系统/环境,但这个怎么样:
创建一个包含你星星的字符串的缓冲区,只需在代码中输入它们即可。
接下来,编写一个函数,将缓冲区显示到您使用的任何输出窗口。
然后,你需要有一个静态指针到缓冲区背面的功能,并执行以下(!):
- 调用缓存打印功能
- 写空字节在当前的指针位置
- 递减静态指针
- 等待一段时间
- 引发自定义的信号与raise()
在main()函数中,您将自定义信号的Signal Handler设置为上述函数,然后提升自定义信号。
这不是一个运行时递归:
template<int N>
struct Star
{
Star() { DrawAtRandomPlace(); }
~Star() { RemoveSlowly(); }
Star<N-1> star;
};
template<> struct Star<0> {};
int main()
{
Star<100> stars;
}
上面的代码将生成星模板的100个不同的实例。 RAII将保证绘图和删除的顺序。
这些不是你正在寻找的机器人。 – Tom 2010-08-24 14:00:54
+1 one - template loop unwinding ftw。 – Elemental 2010-08-24 14:02:53
+1,也许'RemoveAtRandomPace();' – Potatoswatter 2010-08-24 14:59:24
什么语言?你能发布你的代码吗? – 2010-08-24 13:41:34
平台/语言? – 2010-08-24 13:41:37
你在写什么语言或格式? – mikek 2010-08-24 13:41:40