做左操作数意味着什么
What does it mean to be the left operand?
我试图弄清楚为什么这个代码能工作(特别是"价格"部分)
struct CarType
{
string maker;
int year;
float price;
bool operator > (carType car)
{
if (price > car.price)
return true;
else return false;
}
};
它说"我们不需要myCar.price,因为myCar是左操作数"。这是什么意思?我在另一个.h文件中写道:
bool operator > (Fraction a, Fraction b)
{
if (a.numerator*b.denominator > b.numerator*a.denominator) return true;
else return false;
}
看看我是如何通过2个分数结构的?我不知道为什么"myCar"只需要传递一个CarType数据结构,也不知道解释是什么意思。有人能启发我吗?谢谢
如果将operator>
编写为自由函数(而不是类的成员),则需要两个操作数。
如果将其作为成员函数编写,则仍然有两个操作数,但其中一个是隐藏的this
操作数。(请记住,当您调用非静态成员函数时,您是在类的特定实例上调用它。)
如果我放入隐含的this->
,它可能会帮助您理解
bool operator > (carType car)
{
if (this->price > car.price)
return true;
else return false;
}
这也意味着,如果你愿意,你可以这样比较汽车:
CarType one, two;
if (one.operator>(two)) // same as if (one > two)
{
// some code...
}
CarType
是一个结构体。它包含有关汽车的信息。假设它已正确初始化,则它已设置了maker
、year
和price
的值。
CCD_ 8是CCD_。当调用成员运算符>
时,它是从/由左边的对象调用的,就像函数一样。如果你在CarType
内部有一个函数myFunction
,你会这样调用它:
myCar.myFunction();
它将对myCar
中已经设置的数据进行操作,对吧?操作员也是如此。当您为CarType
创建>
运算符时,您可以这样调用它:
myCar > otherCar
可能有一个if或围绕它的东西,但这一点是站得住脚的。由于myCar
位于>
运算符的左侧,因此它是左侧操作数。myCar
调用>
,otherCar
作为右侧变量传入。运营商只是让事情看起来更漂亮;在这种情况下,您的>
函数与您在CarType
:中编写该函数的情况相同
bool isGreaterThan (carType car)
{
if (price > car.price)
return true;
else return false;
}
然后这个函数会被这样调用:
myCar.isGreaterThan(otherCar);
在这种情况下,很清楚发生了什么,对吧?myCar
是函数被调用的对象;otherCar
就是被拿来比较的那辆车。当您使用运算符时,情况类似;这意味着左边的操作数在调用函数,右边的操作数被传入。重载运算符使代码变得简单易读,并提供了灵活性(即,现在有一些数据结构可以基于>
运算符执行排序,如果你决定用isGreaterThan
函数定义相等,它们就无法执行。
我希望这能澄清你的困惑;如果你还想让我解释什么,请告诉我!
三点:
- 按值传递参数代价高昂,因为必须复制所有数据成员
- 由于比较不会改变对象,因此应该在代码中添加
const
if (expr) return true; else return false;
总是可以简化为return expr;
修改代码:
bool operator>(const carType& car) const
{
return price > car.price;
}
bool operator>(const Fraction& a, const Fraction& b)
{
return a.numerator*b.denominator > b.numerator*a.denominator;
}
第一个operator>
是CarType
的成员,因此调用它的CarType
实例是左操作数。第二个operator>
不是任何对象的成员,因此必须指定左操作数。
- 这行代码在C++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它