zoukankan      html  css  js  c++  java
  • 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;
    };
    

      

      

  • 相关阅读:
    决策树和随机森林
    6个开源数据科学项目
    机器学习:梯度下降
    Python中的数据结构
    方差分析介绍(结合COVID-19案例)
    html5
    归并排序
    前端与后端
    Dw3 Sublime text 3 UltraEdit XAMMPP 火狐浏览器 ISS
    ECMAScript JavaScript JScript
  • 原文地址:https://www.cnblogs.com/DARKDD/p/3740339.html
Copyright © 2011-2022 走看看