在C++中,为什么代码示例在重载运算符时经常使用内存位置
In C++, why do code examples often use memory locations when overloading operators?
我在下面写了一些示例代码。
#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"的目的是什么,这是我在示例代码中经常看到的?更重要的是,如果我们把地址传递给 friend 函数,它怎么知道在不进行任何取消引用的情况下操作存储在这些地址的对象?对不起,我对这一切有点陌生。任何帮助将不胜感激!
通过内存地址引用 Box 对象 'B1' 和 'B2',就像在第二个版本中一样
这不是正在发生的事情。 此处不使用&
的"运算符地址"伪装。
虽然从技术上讲,区别在于上下文而不是空格放置,但我们可以更清楚地编写代码如下:
friend Box operator+(Box& b1, Box& b2){
Box&
是"引用Box
"的类型。
引用可防止不必要的复制。阅读书中有关参考文献的章节以获取更多信息。
相关文章:
- 运算符重载使用运算符+添加类模板
- 修复重载运算符的使用'+'模棱两可?
- 为什么我不能在运算符=中使用引用类型?
- constexpr 运算符重载使用参数的问题
- 在C++"new"运算符之后使用"realloc"是否安全?
- C++复合逻辑运算符不使用比较运算符
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- #define 与运算符一起使用
- 在条件运算符中使用对象两次会产生 UB 吗?
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- std::map<int, A> 运算符 [] 需要使用空构造函数创建 A
- 运算符重载(使用binaray friend函数)类没有成员,并且成员不可访问
- <<运算符覆盖使用 g++ 而不是窗口编译
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 将逻辑 OR 与 cout 运算符一起使用
- C++模运算符,使用 #define 和自己的类进行浮点运算
- 重载 + 运算符以使用 int 添加对象
- 重载运算符'<<'的使用不明确(操作数类型'ostream'(也称为"basic_ostream<char>")和"Person")
- 如何重载流运算符以使用位于不同文件中的函数
- 为什么标准在移动分配运算符中使用交换?