• 10.2 运算符重载函数作为类成员函数和友元函数


    Complex operator+(Complex &c2) 
    { Complex c;
    c.real=real+c2.real;
    c.imag=imag+c2.imag;
    return c;
    }
    //+是双目运算符,函数重载中只有一个参数,实际上运算符重载函数有两个参数,是由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this
    //指针隐士的访问对象成员函数。
    Complex operator+(Complex *this,Complex &c2)
    {return Complex(this->real+c2.real,this->imag+c2.imag);}
    //运算符重载函数可以作为类的成员函数,还可以作为非成员函数。例:
    #include<iostream>
    using namespace std;
    class Complex
    {
    public:
    	Complex(){real=0;imag=0;}
    	Complex(int r,int i){real=r;imag=i;}
    	void display();
    	friend Complex operator+(Complex &c1,Complex &c2);//将运算符在Complex类中的成员函数 改为类的友元函数,应同时将运算符函数参数改为两个因为,this隐试指针只对类的成员函数有作用
    
    private:
    	int real;
    	int imag;};
    Complex operator+(Complex &c1,Complex &c2)
    {return Complex(c1.real+c2.real,c1.imag+c2.imag);}//Complex 保证返回值类型和该对象类型一致
    void Complex::display()
    {
    	cout<<"("<<real<<','<<imag<<"i)"<<endl;
    }
    int main()
    {
    	Complex c1(3,4),c2(5,-10),c3;
    	c3=c1+c2;
    	cout<<"c1=";
    	c1.display();
    	cout<<"c2";
    	c2.display();
    	cout<<"c1+c2=";
    	c3.display();
    	return 0;
    }
    //什么时候用成员函数方式,什么时候用友元函数?
    //如果将运算符作为成员函数,它可以通过this指针自由的访问本类的数据成员,因此可以少写一个函数的参数。但是必须要求运算表达试第一个参数(即运算符的左操作数)是类的对象。
    如果将一个复数和一个整数相加,(c1+i)可以将运算符重载函数作为类成员函数:
    
    Complex Complex::operator+(int &i)
    return (Complex(real+i,imag);}
    //注意在表达式中重载的运算符,+左侧应为Complex类的对象,如c3=c2+i;不能写成c3=i+c2;
    
    //如果运算符左侧的操作对象属于C++标准类型(如int)或其他类的对象,则运算符重载函数不能作为成员函数,如果函数还必须要访问类的私有成员,则必须声明为友元函数
    friend Complex operator+(int &i,Complex &c)//第一个参数可以不是类对象
    //在类外定义友元函数
    Complex operator+(int &i,Complex &c)
    {return Complex(i+c.real,c.imag);}

    //C++规定,有的运算符(如赋值运算符= 、下标运算符[] 、函数调用运算符() 、 ->、new、delete )必须定义为类的成员函数,有的运算符则不能定义为类的成员函数(如流插入“<<”和流提取运算符“>>”、类型转换运算符)。


  • 相关阅读:
    如何在帮助页面添加测试工具
    如何给你的ASP.NET页面添加HelpPage
    各种序列化库的性能数据
    Quartz.NET配置
    T-SQL中只截取日期的日期部分和日期的时间部分
    sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中+MD5加密
    读取图片数据流转换成图片
    T-SQL Transact-SQL 编程
    Python 链接Mysql数据库
    c 生成随机不重复的整数序列
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586430.html
Copyright © 2020-2023  润新知