[英]constructors and destructors - c++
我需要编写一个程序,在屏幕上打印100颗星(在随机的地方),然后星星一个接一个地慢慢消失。 我不允许使用循环或递归。 我试图与构造函数和析构函数一起玩,但我不能让星星一个接一个地消失(而不是一起消失)。 有任何想法吗?
谢谢,李
对不起 - 忘了提我正在使用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];
}
这实际上只是一个愚蠢的技巧,因为编译器必须运行每个星的构造函数来初始化数组,然后运行EACH star的析构函数,因为它超出了范围。
这也是一个糟糕的伎俩,因为主要功能中的所有工作都是不透明和不可见的。 在这种情况下使用循环显然会更好,并且在这样的析构函数中放置延迟实际上是令人困惑和不可维护的。
这不是运行时递归:
template<int N>
struct Star
{
Star() { DrawAtRandomPlace(); }
~Star() { RemoveSlowly(); }
Star<N-1> star;
};
template<> struct Star<0> {};
int main()
{
Star<100> stars;
}
上面的代码将生成100个不同的Star模板实例。 RAII将保证绘图和删除的顺序。
根据你的最终评论,你可以让你的star
的析构函数延迟吗? 见例如sleep
或usleep
功能。
由于Destructors / Constructors只是一个想法,它们可能不是你问题的正确标题。 我不知道你在哪个系统/环境,但是这个怎么样:
创建一个包含星形字符串的缓冲区,只需在代码中键入它们即可手动创建。
接下来,编写一个函数,将缓冲区显示到您使用的任何输出窗口。
然后,您需要一个具有指向缓冲区后面的静态(!)指针的函数,并执行以下操作:
在main()函数中,将自定义信号的信号处理程序设置为上述功能,然后引发自定义信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.