Как использовать & модификатор для параметра в вызове функции C ++ - PullRequest
0 голосов
/ 02 марта 2020

Мне дали задание для моей 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 и распечатать их. Но это не работает, вы можете мне помочь. У меня есть больше кода из задачи, если вам нужно, и код из наших уроков. Спасибо.

1 Ответ

1 голос
/ 02 марта 2020

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}{
}
...