c++运算符重载基础知识详解
实际上,很多C++运算符已经被重载。eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积。C++根据操作数的数目和类型来决定采用哪种操作。
C++允许将运算符重载扩展到用户定义的类型。例如,允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用加法定义。运算符重载可以使代码看起来更自然。例如,将2个数组相加是一种常见的运算。通常,需要使用下面这样的for循环来实现:
代码如下:
for (int i = 0; i < 20; i++)
evening[i] = sam[i] + janet[i]; // add element by element
但在C++中,可以定义一个表示数组的类,并重载+运算符,于是便有这样的语句:
total = arr1+arr2;
一个计算时间的例子
mytime.h
#include"stdafx.h"
#include"MyTime.h"
#include<iostream>
int_tmain(intargc,_TCHAR*argv[])
{
//比导入整个名称空间更经济
usingstd::cout;
usingstd::endl;
Timeplanning;
Timecoding(2,50);
Timefixing(5,55);
Timetotal;
cout<<"planningtime=";
planning.Show();
cout<<endl;
cout<<"codingtime=";
coding.Show();
cout<<endl;
cout<<"fixingtime=";
fixing.Show();
cout<<endl;
total=coding.Sum(fixing);
cout<<"coding.Sum(fixing)=";
total.Show();
cout<<endl;
total=coding+fixing;
cout<<"coding+fixing=";
total.Show();
cout<<endl;
getchar();
return0;
}
调用
#include"stdafx.h"
#include"MyTime.h"
#include<iostream>
int_tmain(intargc,_TCHAR*argv[])
{
//比导入整个名称空间更经济
usingstd::cout;
usingstd::endl;
Timeplanning;
Timecoding(2,50);
Timefixing(5,55);
Timetotal;
cout<<"planningtime=";
planning.Show();
cout<<endl;
cout<<"codingtime=";
coding.Show();
cout<<endl;
cout<<"fixingtime=";
fixing.Show();
cout<<endl;
total=coding.Sum(fixing);
cout<<"coding.Sum(fixing)=";
total.Show();
cout<<endl;
total=coding+fixing;
cout<<"coding+fixing=";
total.Show();
cout<<endl;
getchar();
return0;
}
执行结果
重点讲解
1.sum函数中将参数声明为引用,可以提高运行效率,节省内存
2.sum函数中,返回值不能是引用。因为sum对象是局部变量,在函数结束时将被删除,因此引用将指向一个不存在的对象。使用返回类型Time意味着在删除sum之前构造他的拷贝,调用函数将得到他的拷贝。
相关推荐
-
C++运算符重载 成员函数与友元函数详解
复制代码 代码如下: #include<iostream>using namespace std;class A{ int x,y; public: A(int xx,int yy):x(xx),y(yy){} A(){x=0;y=0;} A operator+(const A&b) //不加const限定,也可以 { return A(x+b.x,y+b.y); } A operator-() { return A(-x,-y); }
-
C++中的四个默认成员函数与运算符重载详解
本文主要给大家介绍了关于C++默认成员函数与运算符重载的相关内容,分享出来公的敬爱啊参考学习,话不多说,来一起看看详细的介绍: 一:类和对象的基础知识:类的定义,访问限定符,面向对象封装性,对象的大小计算等等.(编译环境为VS2015) 面向对象程序设计: 概念:(Object Oriented Programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性.灵活性和扩展性. 类:类的基
-
简介C++编程中的运算符重载
所谓重载,就是重新赋予新的含义.函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是"一名多用". 运算符也可以重载.实际上,我们已经在不知不觉之中使用了运算符重载.例如,大 家都已习惯于用加法运算符"+"对整数.单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数.单精度数和双精度数的加法操作过程是很不相同的, 但由于C++已经对运算符"+"进行了重载,所以
-
C++运算符重载规则详解
C++允许重载的运算符和不允许重载的运算符 C++中绝大部分的运算符允许重载,具体规定见表 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: (条件运算符) 前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征. C++运算符重载的规则 C++对运算符重载定义了如下几条规则. 1) C++不允许用户自己定义新的
-
C++运算符重载的方法详细解析
运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) {对运算符的重载处理} 例如,想将"+"用于Complex(复数)的加法运算,函数的原型可以是这样的: 复制代码 代码如下: Complex operator + (Complex & c1,Complex &c2); 其中,operator是关键字,时候专门用于定义重载运算符的函数的,运算符名称就是C++提供给用户的预定运算符. 注意:函数
-
深入解析C++编程中的运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如: class complex { public: complex(double r=0.0,double I=0.0){real=r;imag=I;} void display(); private: double real; double imag; }; complex a(10,20),b(5,8); "a+b"运算如何实现?这时候我们需要自己编写程序来说明"
-
c++运算符重载基础知识详解
实际上,很多C++运算符已经被重载.eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积.C++根据操作数的数目和类型来决定采用哪种操作. C++允许将运算符重载扩展到用户定义的类型.例如,允许使用+将两个对象相加.编译器将根据操作数的数目和类型决定使用加法定义.运算符重载可以使代码看起来更自然.例如,将2个数组相加是一种常见的运算.通常,需要使用下面这样的for循环来实现: 复制代码 代码如下: for (int i = 0; i < 20; i++)
-
Cisco路由技术基础知识详解之一
Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽. 2.每台计算机都浪费许多时间处理无关的广播数据. 3.网络变得无法管理,任何错误都可能导致整个网络瘫痪. 4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网
-
Cisco路由技术基础知识详解
Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽. 2.每台计算机都浪费许多时间处理无关的广播数据. 3.网络变得无法管理,任何错误都可能导致整个网络瘫痪. 4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网
-
C语言入门之基础知识详解
一.思维导图 内容不限于此思维导图 二.环境搭建 对于老手,自动跳过这一趴吧,或者也可以看一下我有没有啥纰漏,毕竟小白需要这一趴. 编译器很多,大部分老师会在学生学习C语言的时候推荐使用VC,不带语言提示器的那种,说是可以提高学生的编码能力.我也不知道到底是不是这么一回事儿.我推荐使用VS,这样学的快,函数记不住的问题很严重吗?项目的车轮碾压过去,再记不住也得记住吧!!! 更何况这个系列到后面是会有需要用文本文件编程写项目的阶段. 下载VS2019社区版,不要标新立异选那些最新版的,出了问题到时
-
Kotlin标准函数与静态方法基础知识详解
目录 标准函数with与run和apply with函数 with函数 run函数 apply函数 定义静态方法 标准函数with与run和apply with函数 with函数 接收两个参数:第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式.with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回. 示例代码如下: val result=with(obj){ //这里是obj的上下文 "value"//w
-
Go语言实现运算符重载的方法详解
目录 前言 使用 实现 总结 前言 先带来日常的 GScript 更新:新增了可变参数的特性,语法如下: int add(string s, int ...num){ println(s); int sum = 0; for(int i=0;i<len(num);i++){ int v = num[i]; sum = sum+v; } return sum; } int x = add("abc", 1,2,3,4); println(x); assertEqual(x, 10)
-
java二维数组基础知识详解
目录 1. 查找 2. 顺序查找 3. 二分查找 4. 多维数组 4.1 二维数组 175 4.2 二维数组细节 5. 二维数组的使用方式 176 6. 二维数组的动态初始化 1.先声明:类型 数组名[][]; 再定义(开辟空间) 数组名 = new 类型[大小][大小] 2.动态初始化-列数不确定 178 7. 二维数组的静态初始化 179 8. 二维数组练习 180 8.1 int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和 1. 查找 1) 顺
-
Android RecyclerView 基础知识详解
本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息.可能我们需要较长的时间来消化Android L引入的新东西. 这些天我一直在研究RecyclerView,并想在此给各位分享一下到目前为止我的成果. RecyclerView是什么? RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持. 在开发RecyclerView时充分考虑了扩展性,因此用它
-
.Net Core 3.1 Web API基础知识详解(收藏)
目录 一.前言 二.Swagger调试Web API 三.配置文件 四.文件上传 五.统一WebApi数据返回格式 六.模型验证 七.日志使用 八.依赖注入 九.缓存 十.异常处理 十一.应用安全与JWT认证 十二.跨域 一.前言 随着近几年前后端分离.微服务等模式的兴起,.Net Core也似有如火如荼之势 ,自16年发布第一个版本到19年底的3.1 LTS版本,以及将发布的.NET 5,.NET Core一路更迭,在部署和开发工具上也都支持了跨平台应用.一直对.Net Core有所关注,但未
-
javascript中json基础知识详解
大致介绍 JSON(JavaScript Object Notation JavaScript对象表示法),JSON是一种数据格式,不是一种编程语言.虽然它的名字中有JavaScript但是它却不属于JavaScript,就像Java和JavaScript的关系一样.而且,并不是只有JavaScript才使用它,毕竟 JSON 只是一种数据格式.很多编程语言都有针对 JSON 的解析器和序列化器. JSON是由Douglas Crockford在2001年提出,为了取代XML 语法 JSON的
随机推荐
- 关于SQL Server 2008忘记sa密码修改sa密码的方法图解
- 详谈Java中instanceof和isInstance的区别
- ASP.NET简化编辑界面解决思路及实现代码
- 成为好程序员必须避免的5个坏习惯
- 浅谈编码,解码,乱码的问题
- JQuery $.each遍历JavaScript数组对象实例
- Android使用onCreateOptionsMenu()创建菜单Menu的方法详解
- Android Mms之:联系人管理的应用分析
- JavaScript实现邮箱地址自动匹配功能代码
- dedecms调用discuz论坛信息按照ID分类调用附详细说明
- 将\u8BF7\u9009\u62E9 这样的字符串转为汉字的代码
- javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页
- 详解阿里云CentOS Linux服务器上用postfix搭建邮件服务器
- sql 中 case when 语法使用方法
- 如何在 SQL SERVER 中快速有条件删除海量数据
- js canvas实现简单的图像扩散效果
- java数组排序示例分享
- java实现拉钩网上的FizzBuzzWhizz问题示例
- JAVA提高第八篇 动态代理技术
- php5.4以下版本json不支持不转义内容中文的解决方法