Я написал небольшой пример кода ниже.В C++ почему примеры кода часто используют ячейки памяти при перегрузке операторов?
#include <iostream>
#include <cstdio>
using namespace std;
class Box{
int l; //length
int b; //breadth
int h; //height
public:
Box(){ l =0; b = 0; h = 0;}
Box(int d1, int d2, int d3){ l = d1;b=d2;h=d3;}
int getLength(){return l;}
friend Box operator+(Box b1, Box b2){
Box tempBox;
tempBox.l = b1.l + b2.l;
tempBox.b = b1.b + b2.b;
tempBox.h = b1.h + b2.h;
return tempBox;
}
int calculateVolume(){ return l * b * h;}
};
Этот код не вызывает ошибок при компиляции/запуске. Мы также можем изменить функцию друга на:
friend Box operator+(Box &b1, Box &b2){
Box tempBox;
tempBox.l = b1.l + b2.l;
tempBox.b = b1.b + b2.b;
tempBox.h = b1.h + b2.h;
return tempBox;
и тестовый код работает одинаково хорошо. Мой вопрос в том, какова цель ссылки на объекты Box «b1» и «b2» на их адреса памяти, как во второй версии функции друга, что я часто вижу в примере кода? Более того, если мы передаем адреса функции друга, как это известно, чтобы манипулировать объектами, хранящимися по этим адресам, без каких-либо разыменований? Извините, я немного новичок в этом. Любая помощь будет оценена!
Вам необходимо изучить некоторые основы C++. «&» Означает вызов по ссылке вместо вызова по значению. – stark
Получите хорошую книгу, прочитайте о ссылках на C++. Ваш первый пример и второй пример выглядят похожими, но под ними разные дикие вещи. Прочтите несколько проходов по ссылке. –
@Ben: Не то, что «дикий», действительно. На самом деле, меня не удивило бы, если бы сгенерированная сборка оказалась более или менее одинаковой, когда все было сказано и сделано. Три ненужных целочисленных копии легко элиминируются. –