Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运算符重载中的成员二元运算符和非成员二元运算符 在尝试学习运算符重载时,我从C++入门中阅读下面的语句。坦率地说,我不太明白这些声明想要传达什么信息。示例包括定义成员二进制运算符和非成员二进制运算符。使用它们有什么区别吗_C++ - Fatal编程技术网

运算符重载中的成员二元运算符和非成员二元运算符 在尝试学习运算符重载时,我从C++入门中阅读下面的语句。坦率地说,我不太明白这些声明想要传达什么信息。示例包括定义成员二进制运算符和非成员二进制运算符。使用它们有什么区别吗

运算符重载中的成员二元运算符和非成员二元运算符 在尝试学习运算符重载时,我从C++入门中阅读下面的语句。坦率地说,我不太明白这些声明想要传达什么信息。示例包括定义成员二进制运算符和非成员二进制运算符。使用它们有什么区别吗,c++,C++,通常,我们将算术运算符和关系运算符定义为非成员函数,并将赋值运算符定义为成员: 加法和复合赋值都是二进制运算符,但这些函数定义了不同数量的参数。产生差异的原因是此指针的错误 是的,实际使用中存在差异。特别是,当您将运算符作为非成员函数重载时,可以对任一操作数(或两个操作数)应用转换。使用成员函数重载二进制运算符时,转换只能应用于正确的操作数 这可能会导致一些奇怪的事情。例如,考虑写一个“BigNIM”包,你想过载运算符+来处理签名。如果将其作为成员函数重载,则会出现如下奇怪情况: int x =

通常,我们将算术运算符和关系运算符定义为非成员函数,并将赋值运算符定义为成员:

加法和复合赋值都是二进制运算符,但这些函数定义了不同数量的参数。产生差异的原因是此指针的错误


是的,实际使用中存在差异。特别是,当您将运算符作为非成员函数重载时,可以对任一操作数(或两个操作数)应用转换。使用成员函数重载二进制运算符时,转换只能应用于正确的操作数

这可能会导致一些奇怪的事情。例如,考虑写一个“BigNIM”包,你想过载<代码>运算符+<代码>来处理签名。如果将其作为成员函数重载,则会出现如下奇怪情况:

int x = 2;
bignum y = 3;
bignum z;

z = y + x; // works fine.
z = x + y; // doesn't work: x isn't a bignum, and can/won't be converted to one
相反,如果使用非成员函数重载
operator+
,这两个操作都会起作用(假设您有一个构造函数从int创建bignum,这几乎是您肯定想要的)

一些运算符(特别是赋值运算符,如
=
+=
-=
等)是特殊的。转换会创建一个临时对象,并且指定给临时对象1)是不允许的,2)无论如何都没有意义或完成不了多少工作。因此,重载赋值运算符时,始终使用成员函数

int x = 2;
bignum y = 3;
bignum z;

z = y + x; // works fine.
z = x + y; // doesn't work: x isn't a bignum, and can/won't be converted to one