• 运算符重载的三种实现方法


    一、重载为一般函数
    格式:返回类型 operator 运算符(参数列表)

    struct Complex{//定义一个复数结构:包括实部与虚部两部分 
    	double real;//实部 
    	double imag;//虚部 
    };
    Complex operator+(Complex c1,Complex c2){//对加法运算的重载:将运算符'+' 定义为两复数相加 
    	Complex c;
    	c.real=c1.real+c2.real;
    	c.imag=c1.imag+c2.imag;
    	return c;
    }
    ostream&operator<<(ostream&out,Complex c){
    	out<<"("<<c.real<<"+"<<c.imag<<"i)";
    	return out;
    }
    int main()
    {
    	Complex c1={1,2},c2={3,4},c3;//结构体变量的声明
    	c3=c1+c2; 
    	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    运行结果
    在这里插入图片描述
    二、重载为友元函数
    需要访问类中的私有成员,则要将该重载函数在类中声明为友元类。
    格式:friend 类型 重载函数名(参数);

    #include
    using namespace std;
    class Complex{//定义一个复数类包括实部与虚部两部分 
        private:
    	   double real,imag;
    	public:
    		Complex(double r=0,double i=0):real(r),imag(i){
    		}
    		friend Complex operator+(Complex c1,Complex c2);
    		friend ostream&operator<<(ostream&out,Complex c);
    };
    Complex operator+(Complex c1,Complex c2){//对加法运算的重载:将运算符'+' 定义为两复数相加,需要对复数类的私有属性进行访问 
    	Complex c;
    	c.real=c1.real+c2.real;
    	c.imag=c1.imag+c2.imag;
    	return c;
    }
    ostream&operator<<(ostream&out,Complex c){//需要对复数类的私有属性进行访问,声明成友元类 
    	out<<"("<<c.real<<"+"<<c.imag<<"i)";
    	return out;
    }
    int main()
    {
    	Complex c1(1,2),c2(3,4),c3;
    	c3=c1+c2; 
    	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    三、重载为成员函数
    直接声明为成员函数

    #include
    using namespace std;
    class Complex{//定义一个复数类包括实部与虚部两部分 
        private:
    	   double real,imag;
    	public:
    		Complex(double r=0,double i=0):real(r),imag(i){
    		}
    		Complex operator+(Complex c);//直接在类中声明重载运算符 
    		friend ostream&operator<<(ostream&out,Complex c);
    };
    Complex Complex::operator+(Complex c){//定义重载运算符 
    	return Complex (real+c.real,imag+c.imag);
    }
    ostream&operator<<(ostream&out,Complex c){//需要对复数类的私有属性进行访问,声明成友元类 
    	out<<"("<<c.real<<"+"<<c.imag<<"i)";
    	return out;
    }
    int main()
    {
    	Complex c1(1,2),c2(3,4),c3;
    	c3=c1+c2; 
    	cout<<c1<<"+"<<c2<<"="<<c3<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    【无标题】
    linux 安装mysql8.0 超详细教程(实战多次)
    百度之星(数学基础题)
    如何选择UMLChina服务
    大数据题目集——选择题
    软件项目管理判断题
    三台linux服务器部署ceph集群
    Managing Test Files with create_files and delete_files Bash Scripts
    Docker镜像管理:为什么Harbor是首选
    分布式事务解决方案
  • 原文地址:https://blog.csdn.net/2301_76371717/article/details/133971337