首页 第6章 运算符重载

第6章 运算符重载

举报
开通vip

第6章 运算符重载nullnull二0一二年三月第6章 运算符重载 第6章 运算符重载 运算符重载是C++的一项强大功能。通过重载,可以扩展C++运算符的功能,使它们能够操作用户自定义的数据类型,增加程序代码的直观性和可读性。6.1 运算符重载基础6.1 运算符重载基础1、运算符重载的概念 C++的运算 符对语言预定义类型是重载的 int i= 2+3; double j=2+4.8; float f=float(3.1)+float(2.0); 对于上面的3个加法表达式,C++系统提供了类似于下面形式的运算符重载函数: in...

第6章 运算符重载
nullnull二0一二年三月第6章 运算符重载 第6章 运算符重载 运算符重载是C++的一项强大功能。通过重载,可以扩展C++运算符的功能,使它们能够操作用户自定义的数据类型,增加程序代码的直观性和可读性。6.1 运算符重载基础6.1 运算符重载基础1、运算符重载的概念 C++的运算 符对语言预定义类型是重载的 int i= 2+3; double j=2+4.8; float f=float(3.1)+float(2.0); 对于上面的3个加法 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式,C++系统提供了类似于下面形式的运算符重载函数: int operator+(int, int); double operator+(int,double); float operator+(float,float);6.1 运算符重载基础6.1 运算符重载基础C++允许程序员通过重载扩展运算符的功能,使重载后的运算符能够对用户自定义的数据类型进行运算。 比如,设有复数类Complex,其形式如下: class Complex{ double real,image; public: ...... }; 假设定义了下面的复数对象,并且要实现两个复数相加的运算。 Complex c1,c2,c3; …… c1=c2+c3;6.1 运算符重载基础6.1 运算符重载基础why? 使程序便于编写和阅读 使程序定义类型与语言内建类型更一致 how? 1.使用特殊的成员函数 2.使用自由函数,一般为友元函数6.1.3 运算符重载的语法6.1.3 运算符重载的语法运算符的计算结果是值,因此运算符函数是要返回值的函数。其重载的语法形式如下: 返回类型 operator@(参数表) 其中,operator是C++的保留关键字,表示运算符函数。@代表要重载的运算符,它可以是前面列举的可重载运算符中的任何一个。6.1.4 类运算符的重载 6.1.4 类运算符的重载 1、C++为类默认的重载运算符 ① 赋值运算(=); ② 取类对象地址的运算函符(&); ③ 成员访问运算(如“.”和“->”)。 这些运算符不需要重载就可以使用,但要在类中使用其他运算符,就必须明确地重载它们。6.1.4 类运算符的重载 6.1.4 类运算符的重载 2、类运算符重载形式 (1)作为类成员函数的运算符重载 以类成员形式重载的运算符参数比实际参数少一个,第1个参数是以this指针隐式传递的。 class Complex{ double real,image; public: Complex operator+ (Complex b) {……} ...... }; 6.1.4 类运算符的重载 6.1.4 类运算符的重载 (2)作为友元函数的运算符重载 如果将运算符函数作为类的友元重载,它需要的参数个数就与运算符实际需要的参数个数相同。比如,若用友元函数重载Complex类的加法运算符,则形式如下: class Complex{ …… friend Complex operator+(Complex a,Complex b);//声明 //...... }; Complex operator+(Complex a,Complex b){……} //定义 6.2 重载二元运算符6.2 重载二元运算符1、二元运算符的调用形式与解析 a@b 可解释成 a.operator@(b) 或解释成 operator@(a, b) 6.2.1 作为成员函数重载 class X{ …… T1 operator@(T2 b){ ……}; } 其中,T1是运算符函数的返回类型,T2是参数的类型,原则上T1、T2可以是任何数据类型,但事实上它们常与X相同。 6.1.4 类运算符的重载 6.1.4 类运算符的重载 【例6-1】 有复数类Complex,利用运算符重载实现复数的加、减、乘、除等复数运算。 //Eg6-1.cpp #include using namespace std; class Complex { private: double r, i; public: Complex (double R=0, double I=0):r(R), i(I){ }; Complex operator+(Complex b); Complex operator-(Complex b); Complex operator*(Complex b); Complex operator/(Complex b); void display(); };nullComplex Complex::operator +(Complex b){return Complex(r+b.r,i+b.i);} Complex Complex::operator -(Complex b){return Complex(r-b.r,i-b.i);} Complex Complex::operator *(Complex b){ Complex t; t.r=r*b.r-i*b.i; t.i=r*b.i+i*b.r; return t; } Complex Complex::operator /(Complex b) { Complex t; double x; x=1/(b.r*b.r+b.i*b.i); t.r=x*(r*b.r+i*b.i); t.i=x*(i*b.r-r*b.i); return t; } void Complex::display(){ cout<0) cout<<"+"; if (i!=0) cout< class Complex { private: double r, i; public: Complex (double R=0, double I=0) : r(R), i(I){ }; friend Complex operator+(Complex a,Complex b); friend Complex operator-(Complex a,Complex b); friend Complex operator*(Complex a,Complex b); friend Complex operator/(Complex a,Complex b); void display(); };nullComplex operator+(Complex a,Complex b){return Complex(a.r+b.r,a.i+b.i);} Complex operator-(Complex a,Complex b){return Complex(a.r-b.r,a.i-b.i);} Complex operator*(Complex a,Complex b){ Complex t; t.r=a.r*b.r-a.i*b.i; t.i=a.r*b.i+a.i*b.r; return t; } Complex operator/(Complex a,Complex b) { Complex t; double x; x=1/(b.r*b.r+b.i*b.i); t.r=x*(a.r*b.r+a.i*b.i); t.i=x*(a.i*b.r-a.r*b.i); return t; } void Complex::display(){ cout<0) cout<<"+"; if (i!=0) cout< class Complex { private: double r, i; public: Complex (double R=0,double I=0):r(R),i(I){}; friend Complex operator+(Complex a,double b){ return Complex(a.r+b,a.i); } friend Complex operator+(double a,Complex b) { return Complex(a+b.r,b.i); } void display(); };nullvoid Complex::display(){ cout<0) cout<<"+"; if(i!=0) cout< 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一个时间类Time,它能够完成秒钟的自增运算。 //Eg6-4.cpp #include using namespace std; class Time{ private: int hour,minute,second; public: Time(int h,int m,int s); Time operator++(); void display(); }; Time::Time(int h,int m,int s) { hour=h; minute=m; second=s; if(hour>=24) hour=0; //若初始小时超过24,重置为0 if(minute>=60) minute=0; //若初始分钟超过60,重置为0 if(second>=60) second=0; //若初始秒钟超过60,重置为0 }nullTime Time::operator ++(){ ++second; if(second>=60) { second=0; ++minute; if(minute>=60){ minute=0; ++hour; if(hour>=24) hour=0; } } return *this; } void Time::display(){ cout<=60){ t.second=0; ++t.minute; if(t.minute>=60){ t.minute=0; ++t.hour; if(t.hour>=24) t.hour=0; } } return t; } void main(){ Time t1(23,59,59); t1.display(); ++ t1; //隐式调用方式 t1.display(); operator++(t1); //显式调用方式 t1.display(); }6.5 输入/输出运算符重载6.5 输入/输出运算符重载6.5.1 重载输出运算符<< 输出运算符<<也称为插入运算符,通过输出运算符<<的重载可以实现用户自定义数据类型的输出。 重载运算符<<的常见格式如下: ostream &operator<<(ostream &os, classType object) { …… os<< … //输出对象的实际成员数据 return os; //返回ostream对象 }6.5 输入/输出运算符重载6.5 输入/输出运算符重载6.5.2 重载输入运算符>> 输入运算符>>也称为提取运算符,用于输入数据。通过输入运算符>>的重载,就能够用它输 入用户自定义的数据类型 其重载形式如下: istream &operator>>(istream &is,class_name &object) { …… is>> … //输入对象object的实际成员数据 return is; //返回istream对象 }null【例6-13】 有一销售人员类Sales,其数据成员有姓名name,身份证号id,年龄age。重载输入/输出运算符实现对Sales类数据成员的输入和输出。 //Eg6-13.cpp #include #include class Sales{ private: char name[10]; char id[18]; int age; public: Sales(char *Name,char *ID,int Age); friend ostream &operator<<(ostream &os,Sales &s); //重载输出运算符 friend ostream &operator>>(istream &is,Sales &s); //重载输入运算符 }; Sales::Sales(char *Name,char *ID,int Age) { strcpy(name,Name); strcpy(id,ID); age=Age; } null ostream& operator<<(ostream &os,Sales &s) { os<>(istream &is,Sales &s) { cout<<"输入雇员的姓名,身份证号,年龄"<>s.name>>s.id>>s.age; return is; } void main(){ Sales s1("杜康","214198012111711",40); //L1 cout<>s1; //L4 cout< void main(){ comFinal com("刘科学",78,76,89); Account a1("张三星",98,78,97,67,87); Chemistry c1("光红顺",89,76,34,56,78); cout<
本文档为【第6章 运算符重载】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_463355
暂无简介~
格式:ppt
大小:364KB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2012-06-14
浏览量:71