运算符重载实例
运算符重载的案例

cout<<p1.x<<","<<p1.y<<endl;
p1=p2++;//验证单目运算符重载
cout<<p1.x<<","<<p1.y<<endl;
bool p4;//验证关系运算符
p4=(p2==p3);
printf("%d",p4);
p4=(p2>p3);
point operator -(const point &p);//声明运算符重载-
point operator *(const point &p);//声明运算符重载*
point operator /(const point &p);//声明运算符重载/
//关系运算符重载
bool operator ==(const point &p);//声明运算符重载==
{
point temp;
temp.x=x/p.x;
temp.y=y/p.y;
return temp;
}
bool point::operator ==(const point &p)//==运算符重载
{
if(x==p.x&&y==p.y)
return true;
else
bool operator > (const point &p);//声明运算符重载>
//赋值运算符重载
point &operator =(const point &p);//声明赋值运算符重载=
运算符重载

void complex::print( ) { if (imag==0) cout<<real<<endl; else if(imag>0) cout<<real<<"+"<<imag<<"i\n"; else cout<<real<<imag<<"i\n"; } complex operator -(complex obj) { complex temp; temp. real= -obj.real ; temp. imag= -obj.imag; return temp; }
10
void main( ) { complex com1(2.3,4.6),com2(3.6,2.8),result; cout<<"complex com1 and com2 orderly:\n"; com1.print( ); com2.print( ); result=com1+com2; cout<<"com1+com2="; result.print( ); result=com1-com2; cout<<"com1-com2="; result.print( ); result=com1*com2; cout<<"com1*com2="; result.print( ); result=com1/com2; cout<<"com1/com2="; result.print( ); }
2、双目运算符的重载
第14课 运算符重载

第14课运算符重载一、运算符重载的概念1、概念一符多用。
通过重载,对运算符赋予新的含义。
如“+”号,通过重载(C++系统完成),既可以进行整数运算,也可以进行浮点数运算。
2、实例:复数的加法(14_001.cpp)3、上例:对“+”运算符进行重载(14_002.cpp)-------------------------------------------------------------------------------二、运算符重载的规则1、不允许自己定义新的运算符2、不能重载的运算符(1). (成员访问运算符)(2)* (成员指针访问运算符)(3):: (域运算符)(4)sizeof (长度运算符)(5)?: (条件运算符)3、不能改变运算对象的个数4、不能改变运算符的运算级别5、不能改变结合性6、重载运算符的函数不能有默认的参数7、至少有一个参数是自定义的类对象(不能全是C++的标准类型)8、用于类对象的运算符必须重载,有两个例外:“=”“&”9、重载功能应该类似于标准的功能------------------------------------------------------------------------------- 三、运算符重载函数作为友元函数实例:复数相加(14_003.cpp)说明:1、在VC++ 6.0中运行此程序,应修改头两行,见程序。
2、由于友元函数会破坏类的封装性,所以应尽量避免使用。
四、重载双目运算符(有两个操作数,如“+”)1、实例:重载字符串比较运算符“==”、“>”、“<”、“!=”说明:C++的字符串类型,就是对以上的运算符进行了重载,方便了字符串的比较 2、程序(14_004.cpp):以“==”运算符重载为例注意:如果将重载函数定义为友元函数,则程序开头两句应改为:#include <iostream.h>3、重载“+”运算符,对类对象进行相加运算(14_exam.cpp)4、重载“<”运算符,对类对象进行比较(14_011.cpp)5、重载“<”运算符,判断点在不在背景空白处(14_012.cpp)-------------------------------------------------------------------------------五、重载单目运算符1、实例:重载运算符“++”(14_005.cpp)说明:第二个重载函数,多了一个“int”参数,无实际意义,只是与第一个函数区别开来。
6运算符重载

6.1.2 运算符重载的语法形式
➢ 运算符通常是对类中的私有成员进行操作,故重载运算符应 能访问类中的私有成员,所以重载运算符一般采用成员函数或 友员函数的形式。 ➢ 成员函数的语法形式为:
类型 类名 :: operator op ( 参数表 )
{
// 相对于该类定义的操作
else
{ cout << "\n Data overflow !" << endl ;
Hale Waihona Puke #include<iostream.h> #include<stdlib.h> class Calculator { public:
Calculator() { value = 0 ; } ; void operator ++ () ; void operator -- () ; unsigned int operator() () ; private: unsigned int value; }; void main()
第6章 运算符重载
运算符重载使得用户自定义的数据以一种更简洁的方式工作,
就是赋予已有的运算符多重含义。
能表示为
例如
? c1 = c1 + c2 ;
int x , y ; y=x+y;
complex c1 , c2 ; c1 = Cadd (c1 , c2 ) ;
定能义表示为
? // 运复m算数1类符=对重m象载1 +函m数2 ;
{
// 相对于该类定义的操作
} ➢ 一个运算符被重载后,原有意义没有失去,只是定义了相对 一特定类的一个新运算符
C#运算符重载用法实例分析

这篇文章主要给大家介绍了关于c如何给枚举类型增加一个描述特性的相关资料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面来一起学习学习吧
C#运 算 符 重 载 用 法 实 例 分 析
本文实例讲述了C#运算符重载用法。分享给大家供大家参考。具体分析如下:
public class Plane { public virtual double TopSpeed() { return 300.0D;} public static bool operator>(Plane one, Plane two) { return one.TopSpeed() > two.TopSpeed(); } public static bool operator<(Plane one, Plane two) { return one.TopSpeed() < two.TopSpeed(); } } class Jet : Pe TopSpeed() { return 900.0D; } public override string ToString() { return "I'm a Jet"; } } class Airport { [STAThread] static void Main(string[] args) { Plane plane = new Jet(); Console.WriteLine("plane's top speed: {0}",plane.TopSpeed()); Jet jet = new Jet(); Console.WriteLine("jet's top speed: {0}",jet.TopSpeed()); Console.WriteLine("Plane > Jet = {0}", plane > jet); Console.ReadLine(); } }
C++运算符重载讲解与经典实例 (2)

5.重载运算符有哪些限制:
(1)不可臆造新的运算符。必须把重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中。
(c1+c2)*(c1-c2)*c2/c1=9.61538+25.2308i
在程序中,类complex定义了4个成员函数作为运算符重载函数。将运算符重载函数说明为类的成员函数格式如下:
<类名>operator<运算符>(<参数表>)
其中,operator是定义运算符重载函数的关键字。
程序中出现的表达式:
位操作运算符:&,|,~,^,<<,>>
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。
double real;
double imag;
};
complex a(10,20),b(5,8);
“a+b”运算如何实现?这时候我们需要自己编写程序来说明“+”在作用于complex类对象时,该实现什么样的功能,这就是运算符重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。
运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。
运算符重载为类的成员函数的一般语法形式为:
重载实例Word

一、为什么要重载操作符1.操作符重载就是把操作符比如+,-,*,/这些运算符赋于新的意义。
2.操作符重载的目的:C++有许多内置的数据类型,包括int,char,double等,每一种类型都有许多运算符,例如加+,减,乘,除等。
当用户定义了类的对象时,两个对象之间是不能进行这些操作的,比如hyong类的对象a+b,这样的语句如果没有重载+运算符就会出错。
但C++允许用户把这些运算符添加到自已的类中以方便类对象之间的运算就像内置类型的运算一样方便,比如对象a+b这样就很明白更容易懂,当然也可以在类中定义一个对象间相加的函数,比如 a.add(b)调用函数add()以实现两个对象a和b相加,但是这条语句没有比a+b更容易让人理解。
3.怎样实现操作符重载:要实现操作符重载就要使用操作符重载函数,操作符重载函数用关见字operator实现,其形式为:反回类型 operator 操作符 (参数列表){}。
操作符重载函数是一个函数,只不过这个函数的函数名为operator再加上后面要重载的操作符而已,比如要重载+号,则: hyong operator +(hyong m){}这就声明了一个反回类型为hyong的操作符函数,其函数名为operator +4.作为类的成员和友元或者独立于类的区别当操作符重载函数作为类的成员函数时,操作符重载函数的参数会比作为友元或者独立于类的操作符重载函数少一个参数,因为操作符重载类成员函数把调用该函数的第一个类的对象作为函数的第一个参数,也就是隐含的this指针指向调用该函数的第一个对象,所以会少一个参数。
5.调用操作符重载函数的方式:5.1 调用类中的操作符重载函数的方法:当调用类中定义的操作符重载函数时最左边的对象是调用操作符重载函数的对象。
比如在类hyong中重定义的+操作符 hyong operator +(hyong m){},有类hyong的对象m和n则调用操作符重载函数的方法有m+n和m.operator +(n),前一条语句会自动转换为后面这条语句,且m+n的表达式中最左边的对象是调用操作符重载函数的对象,而最右边的那个将被作为参数传送。
第5讲 运算符重载(下)

非标准类型数据间的转换 对于用户自己声明的类型,即非标准类型。编译系统并不 知道怎样进行转换? 如何实现不同类型的类对象之间的转换呢?
10
5.2 不同类型数据间的转换
转换构造函数
类型转换(符)重载
11
1.类型转换构造函数:以其他类型数据为参数来构建一个 成自身类的对象 设计方法 (1) 先声明一个类 (2) 在这个类中定义一个只有一个参数的构造函数,参 数的类型是需要转换的类型,在函数体中指定转换的方法 例:Teacher(Student&s) {num=s.num;strcpy(name,);sex=s.sex;} 注意:不仅可以将一个标准类型数据转换成类对象,也可 以将另一个类的对象转换成转换构造函数自身类的对象
cout<<5
cout cout C3
C3
5
4
重载流提取运算符“>>”
5
5.1运算符重载实例
6
7
8
9
5.2 不同类型数据间的转换
标准类型数据间的转换
在C++中,某些不同类型数据之间可以自动转换,例如 int i = 6; i = 7.5 + i; C++还提供显式类型转换,用户可以指定将数据转换成另一 类型,其形式为:类型名(数据) ,如:int(89.5)
3
问题: (1)重载函数中的return output的作用是什么?在本程 序中output的实参是哪个? (2)如何区分什么情况下的“<<”是标准类型数据的流插 入符,什么情况下的“<<”是重载的流插入符。如 cout<<c3<<5<<endl;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符重载
#include<iostream>
using namespace std;
class Time{
public:
Time(int newH,int newM,int newS); //有参构造
Time(){ //无参构造
hour=0;
minute=0;
second=0;}
int getH(){return hour;}int getM(){return minute;}
int getS(){return second;}
void getslot(){cin>>hour>>minute>>second;}
void getoldtime(){cin>>hour>>minute>>second;}
void gettime() const;
Time& operator+();
int hour,minute,second;
};
Time::Time(int hour/*=0*/,int minute/*=0*/,int second/*=0*/){
if(0<=hour&&hour<24&&0<=minute&&minute<60&&0<=second&&second<60)
{this->hour=hour;
this->minute=minute;
this->second=second;
}else cout<<"Time error!"<<endl;
}
void Time::gettime()const{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Time&Time::operator+()
{cout<<"timeslot>>";Time timeslot;timeslot.getslot();cout<<"New time>>";
second=second+timeslot.second;if(second>=60){second-=60;minute=minute+1;
if(minute>=60){minute-=60;
hour=(hour+1)%24;
}}
minute=minute+timeslot.minute; if(minute>=60){minute-=60;
hour=(hour+1)%24;}
hour=hour+timeslot.hour;if(hour>=24){hour=(hour+1)%24;
}
return *this;
}
int main(){
Time oldclock;
cout<<"Set time>>";
oldclock.getoldtime();
if(oldclock.hour>=24||oldclock.minute>=60||oldclock.second>=60) cout<<"Time error!";
else {cout<<"old Time>>";
oldclock.gettime();
(+oldclock).gettime();}
return 0;
}。