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;
};

  

  

posted @ 2014-06-05 21:32  605  阅读(306)  评论(0编辑  收藏  举报