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++中运算符重载的更多相关文章

  1. string类中运算符重载实现

    C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...

  2. 08 c++中运算符重载(未完成)

    参考:轻松搞定c++语言 定义:赋予已有运算符多重含义,实现一名多用(比较函数重载) 运算符重载的本质是函数重载 重载函数的格式: 函数类型 operator 运算符名称(形参表列)  {  重载实体 ...

  3. 问题 B: 矩形类中运算符重载【C++】

    题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...

  4. c++中运算符重载,+,-,--,+=,-=,*,/,*=,/=,

    #include<iostream> #include<stdlib.h> using namespace std; class Complex { public: Compl ...

  5. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

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

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

  7. 雷林鹏分享:C# 运算符重载

    C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其 ...

  8. C++运算符重载的妙用

    运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,o ...

  9. 《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态

        C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...

随机推荐

  1. flask通过form表单一次上传多个文件

    基本上,用了flask官网的示例代码(中文版,英文版),稍微做了修改. import os from flask import Flask, flash, request, redirect, url ...

  2. pycharm 2017最新激活码

    BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  3. html样式板

    一.bootstrap 二.element 三.iconfont图标 四.font awesome图标

  4. php,mysql存储过程的简单例子

    一.连接mysql 使用phpmyadmin: 打开test数据库: 二.创建存储过程 参数如图. 三.php中调用存储过程 <?php $user = "root"; // ...

  5. 安装Python 库软件时提示"setuptools must be installed to install from a source distribution"错误

    通过如下方式安装: sudo pip install --upgrade pip sudo pip install setuptools 如果提示pip命令没找到,需要先安装python-pip.

  6. zabbix学习

    snmp 默认监控upd161端口 tcp 也有 [root@bogon ~]# netstat -nlutp|grep snmp tcp 0 0 127.0.0.1:199 0.0.0.0:* LI ...

  7. Alpha冲刺 - (4/10)

    Alpha冲刺 - (4/10)   Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 ...

  8. EF6 学习笔记(二):操练 CRUD 增删改查

    EF6学习笔记总目录 ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 接上篇: EF6 学习笔记(一):Code First 方式生成数据库及初始化数据库实际操作 本篇原文链接: I ...

  9. Jenkins内置环境变量的使用

    一.查看Jenkins有哪些环境变量 1.新建任意一个job 2.增加构建步骤:Execute shell 或 Execute Windows batch command 3.点击输入框下方的“可用环 ...

  10. c++ 异常处理(2)

    前面一篇博文简单介绍了 c++ 异常处理的流程,但在一些细节上一带而过了,比如,_Unwind_RaiseException 是怎样重建函数现场的,Personality routine 是怎样清理栈 ...