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。
';