构造函数与赋值c++



我在试图找出构造函数时遇到了巨大的脱节。我的问题是:具有初始化列表的构造函数是否取代了类的集合方法?例如:

Class Rock
{
private: 
double Weight;
public:
void setWeight(double)
{ Weight = wei; }
double getWeight()
{ return Weight; }
double calcWeight()
{ return Weight *= 2; } 
}

使用一个带有初始化列表的构造函数(看起来像:Rock::Rock(double): Weight(w) {}(会取代使用set方法吗?

构造函数和所谓的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

设置程序和构造函数的用途完全不同;替换";另一个。

构造函数设置实例的初始状态,setter允许您在构造后更改该状态。

话虽如此,如果你发现自己在做以下事情:

Rock rock;
rock.setWeight(3);

然后你所做的实际上是设置岩石的初始状态。在这种情况下,那么是的,将权重作为参数的构造函数是优选的。

但是,请注意,这是在类被使用时发生的区别,而不是在声明的时候。

最新更新