在C ++中传递类对象

0 c++ reference object parameter-passing c++11

我正在上一门C ++课程,并且被困在类和对象上。简而言之,我正在做一个分配,创建一个带有两个变量的类(假设长度和宽度)。

我已经弄清楚了如何使用get和set函数来做到这一点。但是,然后,我们必须对这些变量使用数学运算。我们应该编写一个函数,该函数将类的一个实例作为参数(因此有两个变量),然后对该对象(作为参数的一个)和调用方法的对象进行数学运算。

我感到困惑的部分原因是语言,我不确定这到底意味着什么。到目前为止,就像我说的那样,我设法能够通过用户输入设置setLength和setWidth变量。我真的非常想尝试将这些值(或该对象?)传递给函数,然后调用另一个对象的方法?

也许有人可以帮助我弄清楚“将一个对象作为参数然后对我称之为方法的对象进行数学运算”是什么意思?或者只是帮助传递物体?

jag*_*ire 5

传递对象就像传递其他种类的变量一样。如果要将整数传递给函数,则可以使用以下语法声明该函数:

void myFunction(int myInt);
Run Code Online (Sandbox Code Playgroud)

如果您传递的是class对象Foo,则可能是:

void myOtherFunction(Foo myFoo);
Run Code Online (Sandbox Code Playgroud)

这有点像说:“这是我希望您在计算中使用的东西。复制我在此处传递的对象!。而是通过引用传递:

void myFunction(int &myInt);
void myOtherFunction(Foo &myFoo);
Run Code Online (Sandbox Code Playgroud)

使您可以修改传递的值。与更大的对象相比它比通过值传递值便宜得多,后者是此答案中的原始语法。您可以在对计算机说的时候想到它:“我知道您想要此值,但我不会让您复制它。只需查看那边,您就会发现我想要的工作与。” 但是有时候您不想修改正在使用的东西!

当然,您可能会非常小心地避免更改功能,但是C ++语言允许您说您不应该修改变量,然后会检查您是否不为您修改变量!

这可以通过使用

void yetAnotherFunction(const Foo &myFoo);
Run Code Online (Sandbox Code Playgroud)

的意思const是“不要让我被修改!” 编译器,编译器将侦听。


假设您要使用(非成员)函数为简单对象分配一些值:

// a struct should usually hold simple groups of data, 
// that don't do much by themselves. Their members are 
// also public by default.
struct MySimpleType{ 
    int first;
    int second;
};

// object is passed by reference so it can be modified.
void modifier(MySimpleType &object, int newFirst, int newSecond){
    object.first = newFirst;
    object.second = newSecond;
}
Run Code Online (Sandbox Code Playgroud)

然后在您的客户端代码(可能是main函数,在您的编程生涯中这时)上,您需要执行以下操作:

MySimpleType object;

modifier(object, 13, 12);

cout << object.first << ", " << object.second;
Run Code Online (Sandbox Code Playgroud)

应该打印出来:

13, 12
Run Code Online (Sandbox Code Playgroud)