codecamp

C++ 初始化还是构造?

之前我们使用大括号声明并初始化了一些Time结构:

Time currentTime = { 9, 14, 30.0 };
Time breadTime = { 3, 35, 0.0 };

现在,通过使用构造函数,我们能用另一种方式来声明和初始化:

Time time (seconds);

这两个函数展现了不同的编程风格,以及在C++历史上不同的观点。可能是出于这个原因,C++编译器要求你使用其中一个,而不能在一个程序中同时使用。

如果你为结构体定义了一个构造函数,那么你需要使用构造函数来初始化该类型的所有新的结构。不再允许使用花括号的那种语法。

幸运的是,使用重载函数的方式来重载构造函数是合法的。换句话说,可以存在多个构造函数具有相同的"名字",只要它们的参数不同就行。当我们初始化一个新的对象时,编译器会尝试找到具有合适参数的构造函数。

例如,一个构造函数为每个实例变量

Time::Time (int h, int m, double s)
{
    hour = h;   minute = m;   second = s;
}

我们使用以前的语法来调用这个构造函数,特殊之处在于形参需要两个整型数和一个double类型的数:

Time currentTime (9, 14, 30.0);
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; }