11.8 初始化还是构造?

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

之前我们使用大括号声明并初始化了一些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);