C++运算符重载学习笔记
运算符重载
运算符重载其实就是函数的重载。
重载运算符的函数如下:
函数类型 operator 运算符 (形参列表)如:type operator + (argu);
//加号的重载
class oprOverload {//类的声明
public:
oprOverload(int a = 2,int b = 2);//构造函数
oprOverload operator + (oprOverload &);//运算符重载函数声明(+)
void display();
private:
int fNum;
int sNum;
};
oprOverload oprOverload::operator+(oprOverload &a) {//运算符重载函数定义
oprOverload c;
c.fNum =fNum + a.fNum;
c.sNum =sNum + a.sNum;
return c;
};
int main() {
oprOverload a(1,2), b(-1,-2),c;//对象声明
c = a + b;//重载后的+的调用。
a.display();//1,2
b.display();//-1,-2
c.display();//0,0
return 0;
};
不能重载的运算符:. (成员访问运算符)/ .* (成员指针访问运算符)/ :: (域运算符)/ sizeof (长度运算符)/ ?: (条件运算符)
重载不能改变运算符运算对象的个数,如>的运算对象一定是两个;重载不能改变运算符的优先级,不能改变运算符的结合性,不能有默认参数,参数不能全部是C++的标准类型,必须有一种用户自定义的数据类型。
++运算符的重载分为两类,前置++和后置++,在C++中规定,给++的重载函数增加一个int型参数,即为后置++运算符重载函数。
重载流提取符(>>/<<),声明方式如下:
ostream& operator << (ostream &, myClass &);//重载<<运算符声明 istream& operator >> (istream &, myClass &);//重载>>运算符声明
下面是一个练习时用的重载类的例子,代码:
//oprOverload.h
#include <iostream>
using namespace std;
class oprOverload {
public:
oprOverload(int a = 0,int b = 0);//构造函数
~oprOverload();//析构函数
oprOverload operator + (oprOverload &);//运算符重载函数声明(+)
friend oprOverload operator ++ (oprOverload &, int);//重载++运算符,int用来声明这是后置++重载函数
friend ostream& operator << (ostream &, oprOverload &);//重载<<运算符
friend istream& operator >> (istream &, oprOverload &);//重载>>运算符
void display();
private:
int fNum;
int sNum;
};
//oprOverload.cpp
#include <iostream>
#include "operator_overload.h"
using namespace std;
oprOverload::oprOverload(int a,int b) {
this->fNum = a;
this->sNum = b;
};
oprOverload oprOverload::operator+(oprOverload &a) {//运算符重载函数定义(+)
oprOverload c;
c.fNum =fNum + a.fNum;
c.sNum =sNum + a.sNum;
return c;
//另一种实现方法
//return oprOverload(fNum+a.fNum,sNum+a.sNum);//无对象名,建立一个临时对象
};
void oprOverload::display() {
cout<<fNum<<" "<<sNum<<"i"<<endl;
};
oprOverload::~oprOverload() {
cout<<"Destructor"<<endl;
};
//主函数
#include <iostream>
#include "operator_overload.h"
using namespace std;
//运算符重载函数(作为友元函数的存在)
oprOverload operator ++ (oprOverload &a, int) {//作为友元函数的运算符重载函数(int 参数专门用来声明这是后置++的重载函数)
oprOverload b = a;//定义一个oprOverload对象,用来保存自加之前的对象.
a.fNum++;
a.sNum++;
return b;//返回自加前的对象
};
ostream& operator << (ostream &output, oprOverload &a) {//重载<<运算符
output<<a.fNum<<a.sNum;
return output;//为了能够向输出流持续插入信息?
};
istream& operator >> (istream &input, oprOverload &a) {//重载>>运算符
input>>a.fNum>>a.sNum;
return input;//为了能够向输入流持续插入信息?
};
int main() {
//compare <int> com1(1,2);//类模板对象的声明
oprOverload a,b;
b++;
cout<<b;//输出11
cout<<a;//输出00
cin>>a;//输入1 3
cout<<a;//输出13
system("PAUSE");
return 0;
};

浙公网安备 33010602011771号