• 函数定义期望
  1. 通过cout<<对象,打印出复数的实部和虚部,这样一来,就需要重载cout类的位移<<运算函数,但是我们并不能拿到cout源码,在visual studio我们看到的也仅仅是他的定义
  2. 若想访问c1的私有属性,则应当声明为友元函数
  3. 通过定义可以看出cout类的返回值是ostream类型的变量out
void operator<<(ostream &out, cplxaddself &c1)
{
out << "陈培昌" << endl;
out << c1.a << "+" << c1.b<<"i" << endl;
}
  • 类定义
#include <iostream>
#include<string.h>
using namespace std;
class cplxaddself
{
public:
friend void operator<<(ostream &out, cplxaddself &c1);
cplxaddself::cplxaddself(int a,int b)
{
this->a = a;
this->b = b;
} void printmyself()
{
cout <<"复数:"<< this->a << "+" << this->b << "i" << endl;
} private:
int a;
int b;
};
  • 主函数文件
void main()
{
cplxaddself c1(, ),c3(,);
cplxaddself c2 = c1;
cout << c2;
system("pause");
}

输出结果:

皆大欢喜,.......不过,要是以为事情结束那就太简单了

如果我们稍加修改就报错了,其实真正实现的理想方案是满足链式编程

void main()
{
cplxaddself c1(, ),c3(,);
cplxaddself c2 = c1;
cout << c2<<endl;//报错
system("pause");
}

所以位移运算需要重载为

ostream& operator<<(ostream &out,cplxaddself &cplx)
{
out << "queen of rain" << endl;
out << cplx.a << "+" << cplx.b << "i" << endl;
return out;
}
void main()
{
cplxaddself c1(, ),c3(,);
cplxaddself c2 = c1;
c1++;
cout <<"before:"<< c2<<" after: "<<c1;
system("pause");
}

输出结果:

C++左移运算符重载的更多相关文章

  1. C++学习(12)—— 运算符重载

    运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 1.加号运算符重载 作用:实现两个自定义数据类型相加的运算 #include <iostream> #i ...

  2. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)

    swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...

  3. C++之运算符重载(2)

    上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又 ...

  4. C++之------运算符重载

    ①  什么是运算符重载? 何为C++的运算符重载呢? 其实就是运算符给它重新赋予新的含义或者多重含义.让它有另外一种新的功能. 为什么需要运算符重载? 面向对象中为了实现类的多态性,我们就引用了运算符 ...

  5. 【C++知识汇总】运营商 &amp; 运算符重载

    [运算符]        在进行运算时,假设右括号的话我们知道先运算哪个,那假设没有括号了.算术运算符,关系运算符,逻辑运算符,位运算符.赋值运算符,++.--运算符等等,那么多的运算符.我们先算哪边 ...

  6. C++哪些运算符重载能够重载?

    运算符重载是C++极为重要的语言特性之中的一个.本文将用代码实例回答--C++哪些运算符能够重载?怎样重载?实现运算符重载时须要注意哪些? 哪些运算符能够重载,哪些不可重载? C++98,C++0x, ...

  7. [转]C++之运算符重载(2)

    上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又 ...

  8. 看懂Gradle脚本(4)- Groovy语法之运算符重载

    继续讨论Task定义 回想一下前一篇文章的样例: task myTask { doLast { println 'hello world!' } } 这段脚本定义了一个名为myTask的任务.而且通过 ...

  9. Python全栈工程师(异常(高级)、运算符重载)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...

随机推荐

  1. vue中$router以及$route的使用

    路由基本概念 route,它是一条路由. { path: '/home', component: Home } routes,是一组路由. const routes = [ { path: '/hom ...

  2. 【Linux】进程的结构,创建,结束,以及程序转化为的进程的过程

    本文内容: 1.进程的结构 2.程序转化为进程的过程 3.进程的创建 4.进程的结束 背景知识: 1.进程是计算机中处于运行的程序的实体 2.进程是线程的容器 3.程序本身只是指令,数据以及组织形式的 ...

  3. Windows中使用 Python 调用 Matlab 程序

    https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...

  4. 装饰器login_required

    装饰器login_required将游客身份引导至登录页面,登录成功后跳转到目的页面 url.py path('login/',views.login), path('home/',views.hom ...

  5. class——python编程从入门到实践

    创建和使用类 1. 创建Dog类 class Dog: """一次模拟小狗的简单尝试""" def __init__(self, name, ...

  6. python学习-63 组合

    组合 1.什么是组合? 定义一个类,由数据属性构成,这几个属性又可以是通过一个类实例化的对象,这就是组合. 举例: class School: def __init__(self,name,addre ...

  7. foreach引用坑

    先看下面代码 $arr1 = [1, 2]; foreach($arr1 as $key => $value) { $value = $value + 1; } var_dump($key, $ ...

  8. gitlab 安装、备份与还原及常见设置

    gitlab 安装.备份与还原及常见设置 安装 安装过程比较简单,跑在 docker 上,执行命令即可 -v参数后面的值为卷的名称,自动创建数据卷(如果数据卷不存在) https://docs.git ...

  9. 概率及期望DP小结

    资源分享 26 个比较概率大小的问题 数论小白都能看懂的数学期望讲解 概念 \(PS\):不需要知道太多概念,能拿来用就行了. 定义 样本(\(\omega\)):一次随机试验产生的一个结果. 样本空 ...

  10. GitHub Action一键部署配置,值得拥有

    最近由于自己的个人应用增加,每次都需要在服务器手动发布,觉得特别麻烦,所以想通过代码控制自动发布,直接选择了GitHub Action. GitHub Action持续集成服务,目前已经免费开放使用, ...