构造函数和所谓的setter方法是两个不同的东西,并且在不同的上下文中使用。与 setter 不同,构造函数可以隐式使用(例如,当我们有一个带有类类型元素的标准库容器时使用默认构造函数),当一个对象被实例化时。
std::vector<Rock> vec_of_rocks; // Will contain default initialized Rock objects
此外,构造函数允许我们控制当我们复制构造对象时(如在 中Rock b(a);
)以及在其他少数情况下如何实例化它。
同时,该类的用户可以使用 setter 方法显式地修改现有对象。大多数情况下, setter方法用于提供安全且受控的方式来修改某些private
数据成员。
// First check for the weight to be non-negative, then set it
void Rock::setWeight(const double &d)
{ if (d >= 0) Weight = d; else Weight = 0; }
Rock r_object; // Default initialized object r_object (by default constructor)
r_object.setWeight(3.14); // In the user-code, we modify default initialized value
请注意,我们可以通过构造函数成员初始化器列表引入使用指定值初始化对象的构造函数。
Rock::Rock(const double &d) : Weight(d) {} // Constructor that takes an argument, not a default one
Rock r_object_2(1,12); // Uses the defined above constructor, not a default one