11.7 构造函数

优质
小牛编辑
135浏览
2023-12-01

我们在第九章中写的另一个函数是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。