c++中运算符重载
c++语言中运算符重载都是通过函数来实现的,所以其实质为函数重载,当c++语言原有的一个运算符被重载之后,它原来所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。
<1>用成员函数重载运算符

例1:
#include <iostream>
using namespace std;
class RMB{
public:
RMB(unsigned int d,unsigned int c);
RMB operator+(RMB&);
RMB& operator++();
void display(){
cout<<(yuan+jf/100.0)<<endl;
}
protected:
unsigned int yuan;
unsigned int jf;
};
RMB::RMB(unsigned int d,unsigned int c){
yuan=d;
jf=c;
while(jf>=){
yuan++;
jf-=;
}
}
RMB RMB::operator +(RMB& s){
unsigned int c=jf+s.jf;
unsigned int d=yuan+s.yuan;
RMB result(d,c);
return result;
}
RMB& RMB::operator++(){
jf++;
if(jf>=){
jf-=;
yuan++;
}
return *this;
}
int main(){
RMB d1(,);
RMB d2(,);
RMB d3(,);
d3=d1+d2;
++d3;
d3.display();
return ;
}
结果:4.11
例2:
#include <iostream>
#include <string>
using namespace std;
class String
{
char name[];
public:
String(char* str){
strcpy(name,str);
}
String(){
}
~String(){
}
String operator+(const String&);
void display(){
cout<<"The string is:"<<name<<endl;
}
};
static char* str;
String String::operator+(const String& a){
strcpy(str,name);
strcat(str,a.name);
return String(str);//等价于return str;进行自动类型转换
}
int main(){
str=new char[];
String demo1("Visual C++");
String demo2("6.0");
demo1.display();
demo2.display();
String demo3=demo1+demo2;
demo3.display();
String demo4=demo3+"Programming .";
demo4.display();
delete str;
return ;
}
结果:

例3:
#include <iostream>
#include <string>
using namespace std;
class String
{
char name[];
public:
String(char* str){
cout<<"constructor,char*--->String\n";
strcpy(name,str);
}
String(String &s){
cout<<"copy constructor\n";
strcpy(name,s.name);
}
String(){
cout<<"default constructor\n";
}
~String(){
}
void operator=(const String&s){
strcpy(name,s.name);
cout<<"operator ="<<endl;
}
String operator+(const String&);
void display(){
cout<<"The string is:"<<name<<endl;
}
};
static char* str;
String String::operator+(const String& a){
String s;
cout<<"operator +\n";
strcpy(s.name,name);
strcat(s.name,a.name);
// return String(str);//等价于return str;进行自动类型转换
return s;
}
int main(){
str=new char[];
String demo1("Visual C++");
String demo2("6.0");
demo1.display();
demo2.display();
String demo3;
demo3=demo1+demo2;
cout<<"---------------\n";
demo3.display();
String demo4;
demo4=demo3+"Programming .";
demo4.display();
delete str;
cout<<"---------------\n";
String demo5=demo4;
demo5.display();
return ;
}
结果:

ps:注意拷贝构造函数的应用!23333
<2>友元函数重载运算符

c++中运算符重载的更多相关文章
- string类中运算符重载实现
C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...
- 08 c++中运算符重载(未完成)
参考:轻松搞定c++语言 定义:赋予已有运算符多重含义,实现一名多用(比较函数重载) 运算符重载的本质是函数重载 重载函数的格式: 函数类型 operator 运算符名称(形参表列) { 重载实体 ...
- 问题 B: 矩形类中运算符重载【C++】
题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...
- c++中运算符重载,+,-,--,+=,-=,*,/,*=,/=,
#include<iostream> #include<stdlib.h> using namespace std; class Complex { public: Compl ...
- Python 中的运算符重载
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...
- C++之------运算符重载
① 什么是运算符重载? 何为C++的运算符重载呢? 其实就是运算符给它重新赋予新的含义或者多重含义.让它有另外一种新的功能. 为什么需要运算符重载? 面向对象中为了实现类的多态性,我们就引用了运算符 ...
- 雷林鹏分享:C# 运算符重载
C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其 ...
- C++运算符重载的妙用
运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,o ...
- 《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态
C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...
随机推荐
- 移动端web兼容各种分辨率写法
移动端web开发最好用rem单位,再设置以下js,以iphone6 750*1334为基准 <script> var size = document.documentElement.cli ...
- HTTP协议简单认识
一.HTTP协议简介 HTTP超文本传输协议是一种用于分布式,协作式和超媒体信息系统的应用层协议 二.HTTP协议概述 HTTP是一个客户端和服务端请求和响应的标准 三.HTTP协议工作步骤 1.客户 ...
- Nodejs之路:非I/O的异步API
本篇主要介绍setTimeout,setInterval,setImmediate和process.nextTick. 1,定时器 Node中的定时器和浏览器中用法一致.区别在于:在Node中,执行到 ...
- OpenGL Compute Shader靠谱例子及读取二进制Shader,SPIR-V
学OpenGL以来一直苦恼没有像DX那样可以读取二进制Shader使用的方法,除去有时不想公开自己写的牛逼Shader的心理(虽然目前还从没写过什么牛逼的Shader), 主要是不用现场编译,加快读取 ...
- Maven二
1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...
- tarjan求强连通分量+缩点+割点/割桥(点双/边双)以及一些证明
“tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄> 自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...
- PLSQL基础学习-文字
--oracle 练习: /********************PL/SQL编程基础*******************************/ --firstday -->>&g ...
- DDD简明入门之道 - 开篇
DDD简明入门之道 - 开篇 犹豫了很久才写下此文,一怕自己对DDD的理解和实践方式有偏差,二怕误人子弟被贻笑大方,所以纰漏之处还望各位谅解.不啰嗦,马上进入正题,如果你觉得此文不错就点个赞吧. 概述 ...
- shell 文件操作
序 在linux平台下开发,我们经常会接触到一些任务性质的工作,而处理方式多样化.现积累各个案例. 从远程服务器拉取文件到本地服务器 scp work@cp01-xx-dev.com: ...
- 解决C#中调用WCF方法报错:远程服务器返回错误 (404) 未找到
IIS配置问题,解决方法: 1. 首先添加MIME类型 扩展名“.svc”,MIME类型 “application/octet-stream” 2.处理程序映射--添加托管处理程序 请求路径 “.sv ...