这个void函数是否会返回一个值?还是我必须添加“&”?

时间:2019-05-02 20:46:17

标签: c++

假设我以前有一个叫做Box的课。我有以下构造函数和void函数:

Box::Box (double height, double width, double length)
{
    setHeight(height);
    setWidth(width);
    setLength(length);
} 

void Box::setHeight(double h)
{
    height = h;
}

稍后在我的main()函数中声明:

Box box1(2.4, 7.1, 5.0);

2.4会变成我盒子的高度吗?

如何?

voidBox :: setHeight(double h)没有返回值,因为它是void函数?那么它将如何设置高度?

3 个答案:

答案 0 :(得分:4)

您的Box类应具有私有变量:

double height_;
double weidth_;
double length_;

setter函数的全部要点是更改私有变量,这些私有变量通常是外部函数无法访问的。这就是为什么要将“ setter”函数包含为类(Box::setHeight)的原因。因此,即使setHeight不返回任何值,Box成员变量也会更改。

假设您还有一个print()函数,该函数会将值输出到stdout。考虑以下示例:

auto box1 (1., 1., 1.);
box1.setHeight(2.); // this is a void function - does something but will not return anything
box1.print(); // this should print (2, 1, 1) as output

答案 1 :(得分:4)

  

2.4会变成我盒子的高度吗?怎么样?

是的,2.4将成为存储在Box对象的成员变量中的高度。

Box::setHeight成员函数。它获得对其被调用对象的隐式引用。从构造函数调用时,成员函数获取对正在构造的对象的引用。这就是为什么任务

height = h;

Box::setHeight内部,将修改height对象的Box成员变量。

  

我必须添加一个&吗?

不。对构造对象的引用是隐式传递的;您无需采取任何行动。

注释1:为了编译代码,Box需要具有一个名为height的成员变量。这与构造函数中的height不同,后者是从调用者传递给构造函数的参数。

注释2:您可以通过使用height关键字引用成员变量来在构造函数中分配成员变量this

this->height = height;

您还可以使用初始化列表来初始化height

Box::Box (double height, double width, double length)
  : height(height)
  , width(width)
  , length(length) 
{
   // The body can be left empty
}

答案 2 :(得分:1)

假设Box看起来像这样:

class Box {
private:
    double height, width, length;
public:
    Box(double height, double width, double length);
    void setHeight(double h);
    void setWidth(double w);
    void setLength(double l);
};

然后Box::setHeight设置类的height成员。成员函数可以访问类的数据成员以及传入的任何参数,因此该函数无需返回任何内容即可为该成员分配值。