在 C++ 中允许全局变量和动态变量在运行时被初始化,比如下面的初始化完全合法:
[C++] 纯文本查看 复制代码
int n = strlen(str);
double arc = sin(data);
float d = 1.02 * count / delta;
和上面的简单变量一样,在创建对象的时候也可以对对象进行动态初始化。这样可以使我们能够根据只有在运行时才能知道的信息来创建我们所需要的对象。
示例代码:
[C++] 纯文本查看 复制代码
#include <iostream>
#include <cstdlib>
#include <ctime> //在C++中使用C库中的函数
using namespace std;
class timer {
int seconds;
public:
//以字符串形式指定初始化时间的秒数
timer(const char *t) { seconds = atoi(t); }
//以整数形式指定初始化时间的秒数
timer(int t) { seconds = t; }
//以分和秒的形式指定初始化时间
timer(int min, int sec) { seconds = min*60 + sec; }
void run();
};
void timer::run()
{
clock_t t1;
t1 = clock();
while((clock()/CLOCKS_PER_SEC - t1/CLOCKS_PER_SEC) < seconds);
cout << "\a"; //响铃
}
int main()
{
timer a(5);
a.run(); //倒数5秒
cout << "Enter number of seconds: ";
char str[80];
cin >> str; //在运行时初始化
timer b(str);
b.run();
cout << "Enter minutes and seconds: ";
int min, sec;
cin >> min >> sec;
timer c(min, sec); //在运行时初始化
c.run();
return 0;
}
运行输出:
$ ./dyninit
Enter number of seconds: 2
Enter minutes and seconds: 0 5 在上面程序中,对象 a 是用常量来初始化的。但对象 b 和 c 则使用用户输入的信息进行初始化。同时可以看到,如果类有多个初始化形式,那么就可以避免在初始化对象时进行类型转换,这里可以看到重载构造函数的好处。 |