如何在 C++Function 调用中对参数使用 & 修饰符

Posted

技术标签:

【中文标题】如何在 C++Function 调用中对参数使用 & 修饰符【英文标题】:How to use & modifier on a parameter in a C++Function call 【发布时间】:2020-03-02 19:25:16 【问题描述】:

我的 cpp 作业给了我一个任务,这个任务很长并且有更多的功能,但我被困在了开始。我在这里要做的只是写下屏幕上给出的要点。

#include <iostream>
using namespace std;

class Point 
public:
    double x, y;
    Point()
        x=0.0;
        y=0.0;
    ;
    Point(double x,double y)
        this -> x = x;
        this -> y = y;
    
    void print() 
        cout << "(x,y) = ("<< x <<","<< y <<")"<<endl;
    
;

class Triangle 
public:
    Point A;
    Triangle(const Point& p1)
        A.x = p1.x; 
        A.y = p1.y;
    

    void print1()
        cout << "A(x,y) = ("<< A.x <<","<< A.y <<")"<<endl;
    
;

int main()
    Triangle A1.0,2.0;
    A.print1();
    return 0;

我在这里的想法是,我有一个名为 Point 的类,它由两个变量 x 和 y 组成,任务中的类 Triangle 有 3 个点,但为了简单起见,我只使用一个,它有一个点是来自 Point 类(所以它应该有 x 和 y 坐标)和一个构造函数,它也有来自 Point 类的点。我只是想链接它们的 x 和 y 坐标并将它们打印出来。但它不会那样工作,你能帮帮我吗?如果您需要,我可以从任务中获得更多代码,以及我们课程中的代码。谢谢。

【问题讨论】:

我最大的问题是 Triangle 构造函数,不知道在 括号内放什么。我知道如何使用常规变量,但是使用任务中给出的“const Point&”,所以我们需要使用它,我不知道该怎么做。 Triangle A(1.0, 2.0); 可以工作(至少在 C++17 中)。或者,Triangle A(Point(1.0,2.0));. 这很快。有用!谢谢,过去一个小时左右一直在挣扎哈哈。 它成功编译了程序,但打印似乎没有打印出任何东西。 C++ 确实有一个 &amp; 运算符(按位与),但您没有在任何地方使用它。类型上的 &amp; 修饰符构成引用类型......并且不是运算符。请修正你的标题 【参考方案1】:

Triangle(const Point&amp; p1) 接受 const reference 到 Point。引用是现有变量的别名。在这种情况下,Triangle 构造函数接收Point 本身,而不是复制Pointconst 很重要,因为它保证Point 不会被Triangle 的构造函数在内部修改。这使您可以传入对临时 Point 的引用,否则该引用将不会存在足够长的时间以使修改变得有意义,并被编译器拒绝以防止可能的错误。

Triangle A1.0,2.0;

将尝试从两个浮点值生成TriangleTriangle 需要对 Point 的引用,因此您必须先创建 Point

Triangle A 1.0,2.0 ;
          ^ ^ 
          | Construct a temporary Point from 2 floating point numbers
          Triangle constructor arguments: one Point

不相关的改进:使用Member Initializer List

Triangle(const Point& p1): Ap1

【讨论】:

哦,我明白了,这很清楚,很好的解释,非常感谢。

以上是关于如何在 C++Function 调用中对参数使用 & 修饰符的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的代码中查明触发 QObject::connect 的调用的位置:无法在 Qt5 中对类型的参数进行排队?

C语言如何在子函数中对主函数中的二维数组值进行修改? 二维数组已经在主函数中用动态数组分配了空间。

c语言中怎么用二维数组作为函数参数

如何在C中对指向char的指针数组进行qsort?

请问如何在matlab中对信号进行去噪操作。最好用函数的形式,方便其他程序调用

如何在 C 中对 argv 的元素进行排序?