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

问题描述 投票:0回答:1

我接到一个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 A{1.0,2.0};
    A.print1();
    return 0;
}

我这里的思路是,我有一个名为Point的类,它是由两个变量x和y组成的,任务中的类Triangle有3个点,但我为了简单起见只用了一个,它有一个点是来自类Point的(所以它应该有x和y坐标),还有一个构造函数也是来自类Point的。我想的是只要把它们的x和y坐标连接起来,然后打印出来就可以了。但不是这样的,你能帮帮我吗。如果你需要的话,我有更多的任务的代码,还有我们课程的代码。谢谢你的帮助。

c++ class constructor operators
1个回答
1
投票

Triangle(const Point& p1) 接受一个 const 参考Point. 引用是一个现有变量的别名。在这种情况下,与其说是复制一个 Pointజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ Triangle 构造函数收到 Point 本身。的 const 重要的是,它是一个承诺,即 Point 不会被内部的 Triangle的构造函数。这允许你传递一个对临时的 Point 否则将不会存在足够长的时间让修改变得有意义,并被编译器拒绝,以防止可能的错误。

Triangle A{1.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

无关的改进。使用... 成员初始化器列表

Triangle(const Point& p1): A{p1}{
}
© www.soinside.com 2019 - 2024. All rights reserved.