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++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...
随机推荐
- Java8特性之Lambda、方法引用和Streams
这里涉及三个重要特性: Lambda 方法引用 Streams ① Lambda 最早了解Lambda是在C#中,而从Java8开始,Lambda也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...
- 7. The British Thached Roof 英国的茅草屋顶
7. The British Thached Roof 英国的茅草屋顶 (1) The view over a valley of a tiny village with thatchd roof c ...
- Maths | 二次型求偏导
- 文件描述符fd、文件指针fp和vfork()
1. fd:在形式上是一个非负整数.实际上他是一个索引值.指向kernal为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个文件或者创建一个新文件的时候kernal向进程返回一个文件描述符. ...
- SDWebImage之SDWebImageCompat
SDWebImageCompat 是SDWebImage 的配置文件,里面利用条件编译对Apple 的各个平台进行了兼容.从源码中可以看到SDWebImage 支持当前的MAC/iOS/TV/WATC ...
- Lerning Entity Framework 6 ------ Joins and Left outer Joins
Joins allow developers to combine data from multiple tables into a sigle query. Let's have a look at ...
- JQuery Mobile - 动态修改select选择框的选中项
<label for="day">选择天</label> <select name="day" id="day" ...
- appium定位之xpath定位
前面也说过appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方式,下面将着重介绍xpath方法,这应该是UI层元素定位最强大的方法啦! 以淘宝app ...
- bootstrap fileinput 使用记录
第一次使用bootstrap fileinput碰到了许多坑,做下记录 需求 本次使用bootstrap fileinput文件上传组件,主要用来上传和预览图片.作为一个后台管理功能,为某个表的某个字 ...
- u-boot中debug的一些总结
研究u-boot,首要搞清楚的是代码的流程,运行流程是什么样子的呢?不知道,就看log.这就要把log信息 打开.研究u-boot的文件,发现里面是很多DEBUG宏定义的打印,这个打印着怎么打开呢? ...