C++二进制运算符重载

J. *_*Doe 8 c++ operator-overloading

根据Deitel的9ed C++如何编程,p.439-440:

二元运算符可以作为具有一个参数的非静态成员函数重载,或者作为具有两个参数的非成员函数重载(其中一个参数必须是类对象或对类对象的引用).

那么,在类对象旁边还是对类对象的引用还有什么其他对象?我什么都想不到.

R S*_*ahu 13

那么,在类对象旁边还有对类对象的引用还有什么其他对象?

有由语言定义的基本类型,例如int,double.基本类型的实例也是对象.

假设你有:

struct Foo { ... };
Run Code Online (Sandbox Code Playgroud)

您可以将该operator+函数作为非成员函数重载

Foo operator+(Foo , int);
Foo operator+(Foo& , int);
Foo operator+(int, Foo);
Foo operator+(int, Foo&);
Run Code Online (Sandbox Code Playgroud)

在所有这些情况下,其中一个论点是a Foo或a Foo&.它也可以Foo const&.但是,你不能超载

int operator+(int, int);
Run Code Online (Sandbox Code Playgroud)

因为参数类型都不是类或类的引用.

  • 在标准语言中,原始指针和原始数组也被视为对象.唯一不是对象类型的类型是函数类型,引用类型和(cv)`void`([basic.types]/7).但在其他情况下,"对象"的含义可能不太清楚. (3认同)
  • 也许更相关的是,即使不存在非类类型的内置运算符,您也无法为它们定义运算符,例如“int operator<< (double, double)”。 (2认同)

use*_*267 8

这意味着你不能(重新)定义像这样的内置运算符int operator+(int a, int b);.注意,描述不完整,一个或两个参数也可以是enum.