如何在 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++ 确实有一个 &
运算符(按位与),但您没有在任何地方使用它。类型上的 &
修饰符构成引用类型......并且不是运算符。请修正你的标题
【参考方案1】:
Triangle(const Point& p1)
接受 const
reference 到 Point
。引用是现有变量的别名。在这种情况下,Triangle
构造函数接收Point
本身,而不是复制Point
。 const
很重要,因为它保证Point
不会被Triangle
的构造函数在内部修改。这使您可以传入对临时 Point
的引用,否则该引用将不会存在足够长的时间以使修改变得有意义,并被编译器拒绝以防止可能的错误。
Triangle A1.0,2.0;
将尝试从两个浮点值生成Triangle
。 Triangle
需要对 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语言如何在子函数中对主函数中的二维数组值进行修改? 二维数组已经在主函数中用动态数组分配了空间。