codecamp

C++ 构造函数

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

C++ 更复杂的例子
C++ 初始化还是构造?
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }