欢迎来到天天文库
浏览记录
ID:52165386
大小:273.50 KB
页数:43页
时间:2020-04-01
《《C++语言程序设计·中国水利水电版》第8章:多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第8章多态性8.1运算符重载8.2运算符重载为类的成员函数8.3运算符重载为类的友元函数8.4虚函数8.1运算符重载8.1.1问题的提出例6.3的复数类#include"iostream.h"classCComplex{private:doublereal;doubleimag;public:CComplex(doubler,doublei);voidPrint();CComplexAdd(CComplexc);CComplexSub(CComplexc);};第8章多态性CComplexCComplex::Add(CComplexc){CComplextemp;te
2、mp.real=real+c.real;temp.imag=imag+c.imag;returntemp;}CComplexCComplex::Sub(CComplexc){CComplextemp;temp.real=real-c.real;temp.imag=imag-c.imag;returntemp;}8.1运算符重载8.1.1问题的提出(续一)voidmain(void){CComplexa(1,2),b(3.0,4.0),c,d;c=a.Add(b);d=a.Sub(b);cout<<"c=";c.Print();cout<<"d=";d.Print();
3、}第8章多态性复数加减法只能调用成员函数实现,不能使用符号“+”和“-”,可以通过重载“+”、“-”运算符,实现如c=a+b这样的调用方式运算符重载:运算符重载的实质就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,产生不同的行为。运算符重载的实质就是函数重载。例8.1用运算符实现复数的加减运算#include"iostream.h"classCComplex{private:doublereal;doubleimag;public:CComplex(doubler=0,doublei=0);voidPrint();CComplexoperator
4、+(CComplexc);CComplexoperator-(CComplexc);};CComplex::CComplex(doubler,doublei){real=r;imag=i;}第8章多态性例8.1(续一)voidCComplex::Print(){cout<<"("<5、Complex::operator-(CComplexc){CComplextemp;temp.real=real-c.real;temp.imag=imag-c.imag;returntemp;}第8章多态性例8.1(续二)voidmain(void){CComplexa(1,2),b(3.0,4.0),c,d;c=a+b;d=a-b;cout<<"c=";c.Print();cout<<"d=";d.Print();}第8章多态性该语句相当于对函数operator+(CComplexc)的调用:“c=a.operator+(b)”,实现两个复数的加法运算。程序运行6、结果为:c=(4,6)d=(-2,-2)8.1运算符重载8.1.2运算符重载的格式与规则1.运算符重载的格式运算符重载为类的成员函数运算符重载为类的友元函数运算符重载的为类的成员函数,在类中声明的格式为:函数类型operator运算符(参数表);定义该函数的格式:函数类型类名::operator运算符(参数表){函数体;}也可以将重载运算符函数的定义直接写在类中。第8章多态性8.1运算符重载8.1.2运算符重载的格式与规则(续)2.运算符重载的规则(1)除“.”、“*”、“::”、“?:”和“sizeof”等几个运算符不能重载外,C++中几乎所有的运算符都可以重载。(7、2)运算符被重载后,其优先级和结合性不会改变。(3)不能改变运算符操作对象的个数。第8章多态性返回8.2运算符重载为类的成员函数8.2.1双目运算符重载双目运算符,如果重载为类的成员函数,其参数为一个,即比运算对象少一个。例8.2复数的乘法运算,在上例的基础上添加乘法运算符重载函数。复数类乘法运算的定义如下:(a+bi)*(x+yi)=a*x-b*y+(a*y+b*x)i第8章多态性例8.2复数乘法运算源程序#include"iostream.h"classCComplex{private:doublereal;doubleimag;public:C
5、Complex::operator-(CComplexc){CComplextemp;temp.real=real-c.real;temp.imag=imag-c.imag;returntemp;}第8章多态性例8.1(续二)voidmain(void){CComplexa(1,2),b(3.0,4.0),c,d;c=a+b;d=a-b;cout<<"c=";c.Print();cout<<"d=";d.Print();}第8章多态性该语句相当于对函数operator+(CComplexc)的调用:“c=a.operator+(b)”,实现两个复数的加法运算。程序运行
6、结果为:c=(4,6)d=(-2,-2)8.1运算符重载8.1.2运算符重载的格式与规则1.运算符重载的格式运算符重载为类的成员函数运算符重载为类的友元函数运算符重载的为类的成员函数,在类中声明的格式为:函数类型operator运算符(参数表);定义该函数的格式:函数类型类名::operator运算符(参数表){函数体;}也可以将重载运算符函数的定义直接写在类中。第8章多态性8.1运算符重载8.1.2运算符重载的格式与规则(续)2.运算符重载的规则(1)除“.”、“*”、“::”、“?:”和“sizeof”等几个运算符不能重载外,C++中几乎所有的运算符都可以重载。(
7、2)运算符被重载后,其优先级和结合性不会改变。(3)不能改变运算符操作对象的个数。第8章多态性返回8.2运算符重载为类的成员函数8.2.1双目运算符重载双目运算符,如果重载为类的成员函数,其参数为一个,即比运算对象少一个。例8.2复数的乘法运算,在上例的基础上添加乘法运算符重载函数。复数类乘法运算的定义如下:(a+bi)*(x+yi)=a*x-b*y+(a*y+b*x)i第8章多态性例8.2复数乘法运算源程序#include"iostream.h"classCComplex{private:doublereal;doubleimag;public:C
此文档下载收益归作者所有