当前位置: 首页 > 编程日记 > 正文

c++重载(以运算符重载为主)

重载(OverLoading)是面向对象程序设计多态性的一种体现。所谓重载,是指“同一标识符”在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符。也就是说,重载可以使多个函数使用同一个函数名,或者同一个运算符代表不同的运算规则。因此,重载包括函数重载运算符重载,使c++使用重载是为了使程序更加简洁。

函数重载

①普通函数重载

②构造函数重载

③成员函数重载

具体略......

运算符重载

运算符重载规则:

①c++中的运算符除了少数几个以外,全部可以重载,具体规则......

②c++不允许用户自定义新的运算符,只能对c++已有的运算符进行重载。不能重载的有:. * :: sizeof ?: 这五个。

③重载不能改变运算符运算对象(即操作数)的个数。

④重载不能改变运算符的优先级和结合性。

⑤重载运算符必须和用户所定义的自定义对象一起使用,使其参数......

⑥重载运算符的参数不能有默认参数,否则就企图改变运算符参数的个数。

⑦对于类对象的运算符一般必须重载,但有两个例外,运算符 = 和 & 不必用户重载。

例如:......

⑧运算符重载是对......

省略处懒得写了。

运算符重载形式:

①重载为类的成员函数

语法格式: type operator 运算符(形式参数表)

参数表中的参数数目与要重载的运算符有关。如果重载弹幕运算符,则参数表是空的,此时当前对象作为运算符的单操作数;如果重载双目运算符,则参数表中有一个操作数,运算时左操作数是当前对象本身的数据,参数表中的操作数作为右操作数。

例:重载运算符'+',使之能用于两个复数相加:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Complex
 5 {
 6     public:
 7         Complex(){real=0;imag=0;}
 8         Complex(double r,double i){real=r;imag=i;}
 9         Complex operator +(Complex& c2);
10         void display()
11         {
12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
13         }        
14     private:
15         double real;
16         double imag;
17 };
18 
19 int main()
20 {
21     Complex c1(3,4),c2(5,-10),c3;
22     c3=c1+c2;
23     c1.display();
24     c2.display();
25     c3.display(); 
26     
27     return 0;
28 }
29 
30 Complex Complex::operator +(Complex& c2)
31 {
32     Complex c;
33     c.real=real+c2.real;
34     c.imag=imag+c2.imag;
35     return c;
36 }

运行结果:

②重载为类的友元函数

语法格式: friend type operator 运算符(形式参数表)

其中,friend是声明友元的关键字,type为函数返回类型;operator是定义运算符重载函数的关键字;“运算符”是要重载的运算符符号;参数表给出该运算符所需要的参数。

例:重载运算符'+',使其实现复数相加,用友元函数实现。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Complex
 5 {
 6     public:
 7         Complex(){real=0;imag=0;}
 8         Complex(double r,double i){real=r;imag=i;}
 9         friend Complex operator +(Complex& c1,Complex& c2);
10         void display()
11         {
12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
13         }        
14     private:
15         double real;
16         double imag;
17 };
18 
19 int main()
20 {
21     Complex c1(3,4),c2(5,-10),c3;
22     c3=c1+c2;
23     c1.display();
24     c2.display();
25     c3.display(); 
26     
27     return 0;
28 }
29 
30 Complex operator +(Complex& c1,Complex& c2)
31 {
32     Complex c;
33     c.real=c1.real+c2.real;
34     c.imag=c1.imag+c2.imag;
35     return c;
36     
37     //or
38     //return Complex(c1.real+c2.real,c2.imag+c2.imag);
39 }

运行结果和上面重载为类的成员函数相同。

③其他用算符的重载

自加(++)自减(--)运算符重载:为了方便起见,重载为类的成员函数。

赋值(=)(+= 、-=、*=、/=)运算符重载:解决指针悬挂问题。

下标运算符[]:一般采用成员函数的形式重载,主要应用是读取数组的某个元素。

函数调用运算符()的重载:......。

PS:重载运算符[]和()时只能定义为成员函数,而不能用友元函数。

输入输出流运算符:(输出流运算符:<<和输入流运算符:>>)

输入输出流运算符是c++类库提供的......(自行了解)

对“>>”和“<<”重载的函数形式如下:

istream & operator >> (istream&,自定义类&);

ostream & operator << (ostream&,自定义类&);

重载">>"和"<<"的函数作为友元函数,而不能将它们定义为成员函数。

例子略......

v、

转载于:https://www.cnblogs.com/tenjl-exv/p/7600347.html

相关文章:

记录-MySQL中的事件调度Event Scheduler

下面是自己的实例 /*查询event是否开启&#xff08;查询结果Off为关闭 On为开启&#xff09;*/show variables like %sche%; /*开启/关闭命令&#xff08;1开启--0关闭&#xff09;*/set global event_scheduler1; /*关闭事件任务: */alter event e_test_insert ON COMPLETION…

JS 实现下载Blod文件

实现代码&#xff1a; //下载Blod文件 const downLoadBlobFile (filename, res) > {if (!res) return;let a document.createElement(a);let blob new Blob([res], { type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charsetutf-8 });let blo…

盖尔-沙普利算法_盖尔定律-及其与初创企业的关系

盖尔-沙普利算法I realized something fascinating the other day: I realized that, as a startup entrepreneur and founder, I’m a builder of systems.前几天&#xff0c;我意识到了一件令人着迷的事情&#xff1a;我意识到&#xff0c;作为一名初创企业家和创始人&#x…

使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之三(配置文件读取)

干了一天的活&#xff0c;还有点时间&#xff0c;给兄弟们写点东西吧。 大家有没有发现一个问题&#xff1f;那就是在.Net Core的MVC项目里面&#xff0c;没有.config文件了&#xff01;&#xff01;&#xff01;同志们&#xff0c;没有config文件了啊&#xff0c;这样搞&#…

小程序云开发数据库在网站读取

使用TCB JS SDK Tencent Cloud Base(TCB) JavaScript SDK 介绍 TCB 提供开发应用所需服务和基础设施。TCB JS SDK 让你可以在网页端使用 JavaScript 代码服务访问 TCB 的的服务。你可以使用该 SDK 构建自己的公众号页面或者独立的网站等 Web 服务。 安装 TCB JS SDK 可以…

设计模式学习心得4

1.组合模式 定义一个父类&#xff0c;其中包括所有子类的方法接口&#xff0c;那么对于任何一个子类来说对外界都是封闭的&#xff0c;外界只调用父类的接口&#xff0c;而不知道子类是否有实现。 2.迭代器模式 这个很常见&#xff0c;在C中常常会用在标准模版类中&#xff0c;…

react创建组件_如何使用React创建时间轴组件

react创建组件These days I’ve been working on a new page for my website. I wanted to have a Timeline to showcase some of my professional accomplishments over the years.这些天来&#xff0c;我一直在为网站创建新页面。 我希望有一个时间表来展示我多年来的一些专业…

oracle根据一张表更新另外一张表

知道是两张表进行更新&#xff0c;之前作过mysql的,直接就写了&#xff1a; update a,b set a.code b.code wehre a.id b.id 然后就报错了&#xff0c;上网查了下知道oracle不能这样子写 之后找到如下的办法&#xff1a; UPDATE a set a.code (select b.code from b where…

应用内设置语言不重启方法

1、设置本应用方法网上有很多&#xff0c;大概如下 Resources resources getResources(); Configuration config resources.getConfiguration(); DisplayMetrics dm resources.getDisplayMetrics(); config.locale locale; //目标语言 resources.updateConfiguration(confi…

小程序内容审核违规过滤,在小程序使用security.msgSecCheck

使用微信提供的API security.msgSecCheck 查看文档 1.开通云开发&#xff0c;创建云环境。 2.在云函数的目录中&#xff0c;创建一个云函数&#xff08;ContentCheck&#xff09;&#xff0c;如果小程序代码没有云函数的目录&#xff0c;可以在 project.config.json 目录中配置…

如何在JavaScript中切片和拼接数组

.slice() and .splice() are similar methods in JavaScript. They look similar, they sound similar, and they do similar things. For those reasons, it’s important to know the differences between them. Also, they’re used very often, so understanding their usa…

jQuery中getJSON跨域原理详解

详见&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工具条 的时候&#xff0c;其中有个功能就是获取本页面的短网址。 这个想法是好的&#xff0c;可是在我付诸于行动的时候&#xff0c;发…

样式集(七)仿微信发现页样式

效果图&#xff1a; <!--pages/find/find.wxml--><include src"/components/common/common" /> <view class"item" catchtap"nav1"><image class"icon" mode"widthFix" src"/images/icon_5.png&q…

html向js传递id

html获取id方法&#xff1a; <div id"thediv1" style"display:block" onclick"ceshi(this.id)">技术A组</div> this.id ------>本身id转载于:https://www.cnblogs.com/wanlibingfeng/p/7613575.html

javascript功能_功能性JavaScript简介

javascript功能Hey everybody! I’ve written a book called Discover Functional JavaScript, and it’s now ready in both paperback and Kindle formats.大家好&#xff01; 我已经写了一本书《 发现功能JavaScript》 &#xff0c;现在已经可以使用平装本和Kindle格式。 A…

样式集,小程序群聊,聊天室样式,效果图

效果图 注&#xff1a;&#xff08;码云 group_chat_yun &#xff09; 代码&#xff1a; <!-- <view class"top"><image class"page_editright" catchtap"navBack" mode"widthFix" src"/images/editright.png&quo…

GeoQuiz项目的开发与总结2

时间过得很快&#xff0c;第二阶段的学习结束了。 本周的主要工作是完成了Geoquiz项目的剩余部分。 首先是学到了些什么&#xff0c;最主要的是工作的流程&#xff0c;然后是界面的布局&#xff0c;菜单栏的设计到等。当然我觉得我学到的应该是工作制作的思维方式吧。 再来说说…

【12.16】VC++调用Word OLE进行自动化生成报表

&#xff01; 12-16更新 初始化博客转载于:https://www.cnblogs.com/miki-52/p/5052689.html

python timber_如何使用Timber更有效地记录日志

python timberby Ayusch Jain通过Ayusch Jain 如何使用Timber更有效地记录日志 (How to log more efficiently with Timber) Logging is one of the most used utilities in the Android framework. It is really helpful in debugging your code when debugging by break-poi…

node 实现blog博客

https://cnodejs.org/topic/581b0c4ebb9452c9052e7acb转载于:https://www.cnblogs.com/zhangshuda/p/7640363.html

小程序输入框导致界面上移,在输入的时候固定住页面的解决代码

效果&#xff1a; 代码&#xff1a; <view class"comment" style"bottom:{{bottom}}px"><view class"emoji_block" wx:if{{emoji_block_show}}><view wx:for{{connectemoji}} catchtap"add_biaoqing" id"{{item}}…

react中纯函数_如何在纯React中创建电子邮件芯片

react中纯函数by Andreas Remdt由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure React) Imagine that you, the good-looking developer (yes, I’m talking to you!), want to build an invitation form where users can add one or mo…

servlet程序HTTP Status 500 - Error instantiating servlet class 解决

一、项目存放路径问题(最常见) 在安装Tomcat时&#xff0c;运行程序都正常&#xff0c;但却打不开http://localhost:8080/&#xff0c;在Tomcat目录webapps下也找不到自己做的项目&#xff0c;这时因为你做的项目没有部署到webapps目录下&#xff0c;倒霉的时候就会遇到报错HTT…

ASP.NET将原始图片按照指定尺寸等比例缩放显示图片

网站上可能会有很多图片&#xff0c;比如产品图片等&#xff0c;而且他们可能大小不一&#xff0c;宽度和高度也不一定一样&#xff0c;有的很大有的很小。如果放在一张网页上&#xff0c;可能会破坏版面&#xff0c;但是如果强制让他们按照指定的宽度和高度显示&#xff0c;因…

前端开发框架选择

Vue Vant 适用场景&#xff1a;开发移动端 (vue) 上手难度&#xff1a;1 Vant是一款很好用的移动端UI框架&#xff0c;非常轻便&#xff0c;适合小型项目 https://vant-contrib.gitee.io/vant/#/zh-CN/ 微信小程序 适用场景&#xff1a;微信小程序&#xff08;小程序原生框架…

anki_Anki如何挽救我的工程生涯

ankiby Jeffrey Shek通过Jeffrey Shek Anki如何挽救我的工程生涯 (How Anki saved my Engineering Career) I was burned out and my software career was stalling just three years in. My memory sucked. Was my poor memory from stress, lack of sleep or was it always …

信息安全系统设计基础期末总结

【博客汇总】 一、每周读书笔记链接汇总 •[第二周读书笔记] http://www.cnblogs.com/20135302wei/p/4842480.html •[第三周读书笔记] http://www.cnblogs.com/20135302wei/p/4858760.html •[第四周读书笔记] http://www.cnblogs.com/20135302wei/p/4870113.html •[第五周读…

方法 retrun 异步的值,创建一个变量直接等于一个异步方法返回的值

需求&#xff1a;我想创建一个变量&#xff0c;他的值是一个openid&#xff0c; openid 从 getOpenid (封装的一个异步方法) 里面返回&#xff0c;通常调用 getOpenid ,会返回一个Promise 对象&#xff0c;.then 之后才能得到值&#xff0c;例如&#xff1a; //模拟一个异步方…

ps混合模式glsl代码

https://github.com/jamieowen/glsl-blend 转载于:https://www.cnblogs.com/guochen/p/7645227.html

应用程序启动器 标记为信任_为什么您今天不能信任应用程序-以及如何解决它...

应用程序启动器 标记为信任亲爱的每家高科技公司&#xff0c;请窃取这个想法 (Dear Every Single Tech Company, Please Steal This Idea) When you send a photo to someone, your messaging app actually first sends the photo to an app’s server, which then sends the p…