11.7 构造函数
最后更新于:2022-04-01 06:23:22
我们在第九章中写的另一个函数是makeTime:
~~~
Time makeTime (double secs) {
Time time;
time.hour = int (secs / 3600.0);
secs -= time.hour * 3600.0;
time.minute = int (secs / 60.0);
secs -= time.minue * 60.0;
time.second = secs;
return time;
}
~~~
当然,我们要能够为每种新类型创建新的对象。事实上,像makeTime这样的函数是如此普遍,以至于有一种针对它们的特殊函数语法。这些函数被称为**构造函数**,语法看起来是这样的:
~~~
Time::Time (double secs) {
hour = int (secs / 3600.0);
secs -= hour * 3600.0;
minute = int (secs / 60.0);
secs -= minue * 60.0;
second = secs;
}
~~~
首先,注意到构造函数名字和类名相同,没有返回类型。而参数并没有改变。
其次,请注意我们并不需要创建一个新的time对象,也不需要返回任何东西。这两步都是自动处理的。我们可以使用关键字this或者此处使用的隐式方式来引用新对象----我们构造的那个对象。当我们给hour,minute,second写入值时,编译器知道我们引用的是新对象的实例变量。
我们使用介于变量声明和函数调用之间的语法来调用此构造函数:
~~~
Time time (seconds);
~~~
这条语句声明了一个Time类型的变量time,并调用我们刚写的构造函数,把seconds的值作为参数传递给构造函数。系统为新对象分配空间,而构造函数初始化了它的实例变量。结果赋给了变量time。