2025-06-30 17:26:49 admin 中国有世界杯吗

函数重载

在某些面向对象的编程语言中,用于创建对象实例的构造函数也可能被重载。在许多语言中,构造函数的名称是由类的名称预先确定的,因此似乎只能有一个构造函数。每当需要多个构造函数时,它们将会被实现为重载函数。在 C++ 中,缺省构造函数不带参数,使用其适当的缺省值实例化对象成员。例如,用 C++ 编写的餐厅账单对象的缺省构造函数可能会将小费设置为 15%:

Bill()

: tip(0.15), // 百分比

total(0.0)

{ }

这样做的缺点是对于创建好的 Bill 对象,更改其值需要两步才能完成。下面显示了在主程序中对象的创建和对其值的更改:

Bill cafe;

cafe.tip = 0.10;

cafe.total = 4.00;

通过重载构造函数,我们可以在创建对象的同时传递 tip 和 total 这两个参数。这表现为带有两个参数的重载构造函数。这个重载的构造函数和我们之前使用的原始构造函数一样放置在类中。使用哪一个取决于创建新 Bill 对象时提供的参数数量(无,或两个):

Bill(double tip, double total)

: tip(tip),

total(total)

{ }

现在,创建新 Bill 对象的函数可以将两个值传递给构造函数,一步到位设定好数据成员。下面显示了对象的创建和对其值的设定:

Bill cafe(0.10, 4.00);

这对于提高程序效率和缩减代码长度很有用。

构造函数重载的另一个原因可能是强制执行强制性数据成员。在这个例子中,缺省构造函数被声明为 private 或 protected(或者最好是 C++11 起加入的 deleted),以使其无法从外部访问。对于上面的 Bill,total 可能是唯一的构造函数参数 – 因为 Bill 没有为 total 提供实用的缺省值 – 而 tip 的缺省值为 0.15。