运算符重载
要重载运算符,需使用被称为运算符函数的特殊函数形式
operatorop(argument-list)
例如,operator+() 重载+运算符
假如有一个Salesperson类,并为它定义了一个operator+()成员函数,以重载+运算符,如果district2、sid和sara都是Salesperson类对象,则可以编写这样的等式:
district2 = sid + sara;
demo
#ifndef STOCK00_H_
#define STOCK00_H_
#include <string>
class Stock
{
private://可不写,默认是private
int data;
public:
Stock(int b){data = b;}
Stock(){}
~Stock(){};//析构函数
int getdata(){return data;}
const Stock sum(const Stock &)const;
const Stock operator+(const Stock &s)const;
};
#endif
#include<iostream>
#include"stock00.h"
const Stock Stock::sum(const Stock &s)const
{
Stock tmp;
tmp.data = data + s.data;
return tmp;
}
//重载运算符+
const Stock Stock::operator+(const Stock &s)const
{
Stock tmp;
tmp.data = data + s.data;
return tmp;
}
#include<iostream>
#include"stock00.h"
int main()
{
Stock s1(66);
Stock s2(88);
Stock s3;
s3 = s1.sum(s2);
std::cout << "s3 = " << s3.getdata() << std::endl;
s3 = s2.sum(s1);
std::cout << "s3 = " << s3.getdata() << std::endl;
s3 = s1.operator+(s2);
std::cout << "s3 = " << s3.getdata() << std::endl;
s3 = s1 + s2;
std::cout << "s3 = " << s3.getdata() << std::endl;
return 0;
}
运行结果:
和sum一样,operator+()也是Stock对象调用的,它将第二个Stock对象作为参数,并返回一个Stock对象。因此可以像调用sum()那样调用operator+()方法。
重载限制
- 重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。例如,不能将减法运算符(-)重载成计算两个double值得和,而不是他们的差。
- 使用运算符时不能违反运算符原来的句法规范。例如,不能将求模运算符(%)重载成使用一个操作数:
int x;
% x;
- 同时也不能修改运算符的优先级。
- 不能创建新运算符。例如,不能定义operator**()函数来表示求幂。
- 不能重载下面的运算符: