2017-01-10 8 views
-1

Я написал небольшой пример кода ниже.В 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» на их адреса памяти, как во второй версии функции друга, что я часто вижу в примере кода? Более того, если мы передаем адреса функции друга, как это известно, чтобы манипулировать объектами, хранящимися по этим адресам, без каких-либо разыменований? Извините, я немного новичок в этом. Любая помощь будет оценена!

+3

Вам необходимо изучить некоторые основы C++. «&» Означает вызов по ссылке вместо вызова по значению. – stark

+0

Получите хорошую книгу, прочитайте о ссылках на C++. Ваш первый пример и второй пример выглядят похожими, но под ними разные дикие вещи. Прочтите несколько проходов по ссылке. –

+0

@Ben: Не то, что «дикий», действительно. На самом деле, меня не удивило бы, если бы сгенерированная сборка оказалась более или менее одинаковой, когда все было сказано и сделано. Три ненужных целочисленных копии легко элиминируются. –

ответ

0

ссылки Объектами коробки «b1» и «b2» их адреса памяти, как во втором варианте

Это не то, что происходит. & в своем облике "адрес-оператор" здесь не используется.

Хотя технически разница заключается в контексте, а не в пробельном размещении, мы можем более четко писать код следующим образом:

friend Box operator+(Box& b1, Box& b2){ 

Box& типа «ссылка на Box».

Ссылки предотвращают ненужное копирование. Прочтите главу в своей книге о ссылках для получения дополнительной информации.

+0

Спасибо! Очень признателен. – Gimingo

 Смежные вопросы

  • Нет связанных вопросов^_^