使用友元函数实现一元运算符的重载
实现一元运算符的前置重载 即前置++a;

#include <iostream>
using namespace std;class Complex
{
private:int a;int b;
public: Complex(int a= 0,int b = 0){this->a = a;this->b =b;}//友元函数实现运算符++的重载friend  Complex& operator++(Complex &c1)    ;void printCom(void){cout<< a << "+" << b << 'i'<< endl;}protected:
private:
};
//对前置运算符进行重载
//     ++c1  因为最终要得到c1本身函数返回一个引用 这样才能够实现返回引用Complex& operator++(Complex &c1)
{c1.a++;c1.b++;return c1;
}int main()
{Complex c1(1,2),c2(3,4);Complex c3(0,0);++c1;++c1;c1.printCom();cout << "hello world!" << endl;system("pause");return 0;
}

一元运算符重载实现一元运算符的后置重载即 a++;
后置和前置的区别就是后置的多了一个占位符 剩下的就是C++编译器自己调用了不用C++程序员管理管理

#include <iostream>
using namespace std;class Complex
{
private:int a;int b;
public: Complex(int a= 0,int b = 0){this->a = a;this->b =b;}//友元函数实现运算符前置++的重载friend  Complex& operator++(Complex &c1);//友元函数实现运算符后置++的运算符重载friend Complex operator++(Complex  &c1, int);void printCom(void){cout<< a << "+" << b << 'i'<< endl;}protected:
private:
};
//对前置运算符进行重载
//     ++c1  因为最终要得到c1本身函数返回一个引用 这样才能够实现返回引用Complex& operator++(Complex &c1)
{c1.a++;c1.b++;return c1;
}//后置++的运算符重载
//因为后置++的形式和前置++的一样 因此C++里面提供一个占位符的语法可以使用
//调用的时候C++编译器会自动的调用带有占位符的后置 ++的重载函数
Complex operator++(Complex  &c1, int)  //返归一个元素    //函数返回值不是函数重载的判断标志
{原理分析//return c1;//c1.a++;//c1.b++;Complex tmp = c1;   //保证是c1先使用在++c1.a++;c1.b++;return tmp;
}int main()
{Complex c1(1,2),c2(3,4);Complex c3(0,0);// //++c1;//++c1;//c1.printCom();//后置的++c1++;c1.printCom();cout << "hello world!" << endl;system("pause");return 0;
}

重载左移操作符 << 实现链式编程

#include <iostream>
using namespace std;class Complex
{
private:int a;int b;
public: Complex(int a= 0,int b = 0){this->a = a;this->b =b;}//友元函数实现运算符前置++的重载friend  Complex& operator++(Complex &c1);//友元函数实现运算符后置++的运算符重载friend Complex operator++(Complex  &c1, int);friend ostream& operator<<(ostream &out,Complex &c1);void printCom(void){cout<< a << "+" << b << 'i'<< endl;}protected:
private:
};
//对前置运算符进行重载
//     ++c1  因为最终要得到c1本身函数返回一个引用 这样才能够实现返回引用Complex& operator++(Complex &c1)
{c1.a++;c1.b++;return c1;
}//后置++的运算符重载
//因为后置++的形式和前置++的一样 因此C++里面提供一个占位符的语法可以使用
//调用的时候C++编译器会自动的调用带有占位符的后置 ++的重载函数
Complex operator++(Complex  &c1, int)  //返归一个元素    //函数返回值不是函数重载的判断标志
{原理分析//return c1;//c1.a++;//c1.b++;Complex tmp = c1;   //保证是c1先使用在++c1.a++;c1.b++;return tmp;
}
//函数重载  <<操作符      只能单个的输出使用并不能使用多个  因为返回的不是自己
ostream& operator<<(ostream &out,Complex &c1)
{out << c1.a << "+" << c1.b << endl;return out;
}int main()
{Complex c1(1,2),c2(3,4);Complex c3(0,0);// //++c1;//++c1;//c1.printCom();//后置的++//2.  实现//cout.operator << (c1);  在 ostream 类中添加相应的  .operator<<//但是ostream的源码是拿不到的//因此输入输出;流的从在只能使用友元函数的方法实现cout<< c1 << c2 << endl; // 左移操作符放入结合顺序是从左到右的cout << "hello world!" << endl;system("pause");return 0;
}

成员函数和友元函数实现一元运算符重载相关推荐

  1. C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...

  2. C++运算符重载函数作为友元函数

    运算符重载函数作为友元函数 在前面的程序例子中对运算符"+"进行了重载,使之能用于两个字符串的相加.在该例中运算符重载函数 operator +(); 作为 my_string类中 ...

  3. 第七周项目一-成员函数、友元函数和一般函数有区别(1)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...

  4. 采用成员函数和友元函数计算给定两个坐标点之间的距离

    设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离 ...

  5. java 友元函数_C++ 友元函数用法总结

    C++中的友元机制允许类的非公有成员被一个类或者函数访问,友元按类型分为三种: 普通非类成员函数作为友元.类的成员函数作为友元.类作为友元. 1.友元的内容 友元包括友元的声明以及友元的定义.友元的声 ...

  6. 用成员函数和友元函数重载运算符

    一元运算符 首先明白什么是一元,二元和多元运算符,比如++a.b--属于一元运算符,因为参与运算的参数只有一个,以此类推二元运算符就是参与运算的参数有两个,比如a+b. 一元运算符可以表示为:Obje ...

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

    Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...

  8. C++运算符重载函数作为类成员函数和友元函数

    C++运算符重载函数作为类成员函数 1.1成员函数的重载运算符左侧是一个类对象,而且与运算符函数类型相同. 因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数和返回值类型相同,运算结果才 ...

  9. 运算符重载为成员函数,友元函数

    重载运算符是函数重载的一种, 针对类对象进行操作,重载的函数中至少有一个是类对象 int operator +(ass numone, int num){...} 重载为类的成员函数, 单目运算符重载 ...

最新文章

  1. 小猿圈Python学习教程之后端接收前端回传的文件方法
  2. java调用微信扫一扫
  3. 计算机主机安装系统安装系统,系统重装
  4. span 标记 width 设置
  5. 解不等式之代数和不等式
  6. SQLite3中的数据类型
  7. scala集合中添加元素_如何在Scala中将元素添加到列表中?
  8. Let's go home(HDU-1824)
  9. 如何在IDEA中创建并部署JavaWeb程序
  10. python200行代码小游戏_200 行python 代码实现 2048 游戏
  11. java动物类_使用java面向对象创建动物类并输出动物信息
  12. hdu 1133 Buy the Ticket(递推+精度精算)
  13. 洛谷 P1090 合并果子
  14. 网络攻防技术——SQL注入
  15. Unity3d版数字地球、谷歌地球(google earth)
  16. hive mapreduce reducer 调优
  17. bind dlz mysql rpm_BIND+DLZ+MYSQL | 学步园
  18. 转载的java面试题(值得推荐)
  19. Android 天气APP(一)开发准备
  20. 深度学习及并行化实现概述

热门文章

  1. NYOJ 460 项链
  2. hdu 1257最少拦截系统 动态规划
  3. k8s创建pod的步骤
  4. K-近邻算法实现简单filmClassify
  5. 前端页面布局常见问题/已踩过的坑大杂烩
  6. 自动化与网络工程之间的关系
  7. P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
  8. 在这里的周末休息也就是看看奥运
  9. todo:过几天熟悉下Github
  10. 树的Prufer 编码和最小生成树计数