博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定义运算符重载函数名的步骤
阅读量:4212 次
发布时间:2019-05-26

本文共 1699 字,大约阅读时间需要 5 分钟。

全局函数、类成员函数方法实现运算符重载步骤

        1)要承认操作符重载是一个函数,写出函数名称operator+ ()

        2)根据操作数,写出函数参数

        3)根据业务,完善函数返回值(看函数是返回引用 还是指针 元素),及实现函数业务

友元函数实现操作符重载的应用场景

1)友元函数和成员函数选择方法

  • 当无法修改左操作数的类时,使用全局函数进行重载
  • =, [], ()和->操作符只能通过成员函数进行重载

 

2)用友元函数 重载 << >>操作符

  • istream 和 ostream 是 C++ 的预定义流类
  • cin 是 istream 的对象,cout 是 ostream 的对象
  • 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
  • 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据
  • 用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型

 

a)用全局函数方法实现 << 操作符

ostream& operator<<(ostream &out, Complex &c1)

{

        //out<<"12345,生活真是苦"<<endl;

        out<<c1.a<<" + "<<c1.b<<"i "<<endl;

        return out;

}

//调用方法

cout<<c1;

//链式编程支持

cout<<c1<<"abcc";

//cout.operator<<(c1).operator<<("abcd");

//函数返回值充当左值 需要返回一个引用

b)类成员函数方法无法实现 << 操作符重载

                //因拿到cout这个类的源码

                //cout.operator<<(c1);

 

  1. 友元函数重载操作符使用注意点
  1. 友员函数重载运算符常用于运算符的左右操作数类型不同的情况

b)其他

  • 在第一个参数需要隐式转换的情形下,使用友员函数重载运算符是正确的选择
  •  友员函数没有 this 指针,所需操作数都必须在参数表显式声明,很容易实现类型的隐式转换
  •  C++中不能用友员函数重载的运算符有

        =    ()    []    ->

 

代码如下:

#include
using namespace std;class Complex{private: int a; int b; friend ostream& operator<<(ostream &out, ostream &c1);public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } void printCom() { cout << a << " + " << b << "i" << endl; }public: //实现 + 运算符重载 Complex operator+(Complex& c2) { Complex tmp(this->a+c2.a,this->b+c2.b); return tmp; } //前置++ Complex& operator++() { a++; b++; return *this; } //后置++ Complex operator++(int) { // 先使用 在让c1加加 Complex tmp = *this; //return c1; this->a++; this->b++; return tmp; } //成员函数法 实现 -运算符重载 Complex operator-(Complex& c2) { Complex tmp(this->a - c2.a, this->b - c2.b); return tmp; } //前置-- Complex& operator--() { this->a--; this->b--; return *this; } //后置-- Complex operator--(int) { Complex tmp = *this; this->a--; this->b--; return tmp; }};

 

转载地址:http://rezmi.baihongyu.com/

你可能感兴趣的文章
HTML条件注释
查看>>
Putty远程服务器的SSH经验
查看>>
内核态与用户态
查看>>
使用mingw(fedora)移植virt-viewer
查看>>
趣链 BitXHub跨链平台 (4)跨链网关“初介绍”
查看>>
C++ 字符串string操作
查看>>
MySQL必知必会 -- 了解SQL和MySQL
查看>>
MySQL必知必会 -- 使用MySQL
查看>>
MySQL必知必会 -- 数据检索
查看>>
MySQL必知必会 -- 排序检索数据 ORDER BY
查看>>
MySQL必知必会 -- 数据过滤
查看>>
MYSQL必知必会 -- 用通配符进行过滤
查看>>
MYSQL必知必会 -- 用正则表达式进行搜索
查看>>
POJ 3087 解题报告
查看>>
POJ 2536 解题报告
查看>>
POJ 1154 解题报告
查看>>
POJ 1661 解题报告
查看>>
POJ 1101 解题报告
查看>>
ACM POJ catalogues[转载]
查看>>
ACM经历总结[转载]
查看>>