11.8 初始化还是构造?
最后更新于:2022-04-01 06:23:19
之前我们使用大括号声明并初始化了一些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);
~~~