《C++程序设计教程与实验指导》课件第6章多态性.ppt

上传人(卖家):momomo 文档编号:7375468 上传时间:2023-12-12 格式:PPT 页数:45 大小:728.50KB
下载 相关 举报
《C++程序设计教程与实验指导》课件第6章多态性.ppt_第1页
第1页 / 共45页
《C++程序设计教程与实验指导》课件第6章多态性.ppt_第2页
第2页 / 共45页
《C++程序设计教程与实验指导》课件第6章多态性.ppt_第3页
第3页 / 共45页
《C++程序设计教程与实验指导》课件第6章多态性.ppt_第4页
第4页 / 共45页
《C++程序设计教程与实验指导》课件第6章多态性.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、第6章 多态性CComplex CComplex:Add(CComplex c)CComplex temp;temp.real=real+c.real;temp.imag=imag+c.imag;return temp;CComplex CComplex:Sub(CComplex c)CComplex temp;temp.real=real-c.real;temp.imag=imag-c.imag;return temp;第6章 多态性复数加减法只能调用成员函数实现,复数加减法只能调用成员函数实现,不能使用符号不能使用符号“+”和和“-”,可以通,可以通过重载过重载“+”、“-”运算符,实现如

2、运算符,实现如c=a+b这样的调用方式这样的调用方式运算符重载:运算符重载的实质就是对已有的运算符赋予多重含义,使同一个运算符运算符重载:运算符重载的实质就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,产生不同的行为。运算符重载的实质就是函数重载。作用于不同类型的数据时,产生不同的行为。运算符重载的实质就是函数重载。#include iostreamusing namespace std;class CComplex private:double real;double imag;public:CComplex(double r=0,double i=0);void Pr

3、int();CComplex operator+(CComplex c);CComplex operator-(CComplex c);CComplex:CComplex(double r,double i)real=r;imag=i;第6章 多态性void CComplex:Print()cout (real ,imag )endl;CComplex CComplex:operator+(CComplex c)CComplex temp;temp.real=real+c.real;temp.imag=imag+c.imag;return temp;CComplex CComplex:oper

4、ator-(CComplex c)CComplex temp;temp.real=real-c.real;temp.imag=imag-c.imag;return temp;第6章 多态性void main(void)CComplex a(1,2),b(3.0,4.0),c,d;c=a+b;d=a-b;cout c=;c.Print();cout d=;d.Print();第6章 多态性该语句相当于对函数该语句相当于对函数operator+(CComplex c)的调用:的调用:“c=a.operator+(b)”,实现两个复数,实现两个复数的加法运算。的加法运算。第6章 多态性第6章 多态性

5、 返 回第6章 多态性#include iostreamusing namespace std;class CComplex private:double real;double imag;public:CComplex(double r=0,double i=0);void Print();CComplex operator+(CComplex c);CComplex operator-(CComplex c);CComplex operator*(CComplex c);第6章 多态性void CComplex:Print()cout (real ,imag )endl;CComplex

6、CComplex:operator+(CComplex c)CComplex temp;temp.real=real+c.real;temp.imag=imag+c.imag;return temp;CComplex CComplex:operator-(CComplex c)CComplex temp;temp.real=real-c.real;temp.imag=imag-c.imag;return temp;第6章 多态性CComplex CComplex:operator*(CComplex c)CComplex temp;temp.real=real*c.real-imag*c.im

7、ag;temp.imag=real*c.imag+imag*c.real;return temp;void main(void)CComplex a(1,2),b(3.0,4.0),c,d,e,f;c=a+b;d=a-b;e=a*b;f=a+1;cout c=;c.Print();cout d=;d.Print();cout e=;e.Print();cout f=;f.Print();第6章 多态性第6章 多态性#include iostreamusing namespace std;class CInt private:int i;public:CInt(int a=0);void Pri

8、nt();CInt operator+();CInt operator+(int);第6章 多态性void CInt:Print()cout i=i endl;CInt CInt:operator+()CInt temp;temp.i=+i;return temp;CInt CInt:operator+(int)CInt temp;temp.i=i+;return temp;void main(void)CInt a(5),b(5),c,d;c=a+;d=+b;cout a:;a.Print();cout b:;b.Print();cout c:;c.Print();cout d:;d.Pri

9、nt();第6章 多态性 第6章 多态性#include iostream#include stringusing namespace std;class A private:char*str;public:A(char*s=no data);A();void print();A:A(char*s)int len=strlen(s);str=new charlen+1;strcpy(str,s);第6章 多态性A:A()if(str)delete str;void A:print()cout str endl;void main(void)A*p=new A(AAAA);A a1;a1=*p;

10、a1.print();delete p;a1.print();第6章 多态性strpstra1AAAA该语句只是将该语句只是将p所指向的对象数据成员所指向的对象数据成员str赋给对象赋给对象a1的数据成员的数据成员str,即两个,即两个对象的对象的str指向了同一个单元指向了同一个单元 调用析构函数,同时将调用析构函数,同时将str所指向的单元释放了,所指向的单元释放了,再执行再执行a1.print()时,就会出现错误。时,就会出现错误。#include iostream#include stringusing namespace std;class A private:char*str;pu

11、blic:A(char*s=no data);A();A&operator=(A&a);void print();A:A(char*s)int len=strlen(s);str=new charlen+1;strcpy(str,s);第6章 多态性A:A()if(str)delete str;A&A:operator=(A&a)int len=strlen(a.str);if(str)delete str;/先释放,再根据实际需要重新申请str=new charlen+1;strcpy(str,a.str);return*this;void A:print()cout str endl;第6

12、章 多态性void main(void)A*p=new A(AAAA);A a1;a1=*p;a1.print();delete p;a1.print();第6章 多态性strpstra1AAAAAAAA 返 回第6章 多态性第6章 多态性#include iostreamusing namespace std;class CComplex private:double real;double imag;public:CComplex(double r=0,double i=0);void Print();friend CComplex operator+(CComplex c1,CCompl

13、ex c2);friend CComplex operator-(CComplex c1,CComplex c2);CComplex:CComplex(double r,double i)real=r;imag=i;第6章 多态性void CComplex:Print()cout (real ,imag )endl;CComplex operator+(CComplex c1,CComplex c2)CComplex temp;temp.real=c1.real+c2.real;temp.imag=c1.imag+c2.imag;return temp;CComplex operator-(C

14、Complex c1,CComplex c2)CComplex temp;temp.real=c1.real-c2.real;temp.imag=c1.imag-c2.imag;return temp;第6章 多态性void main(void)CComplex a(1,2),b(3.0,4.0),c,d,e;c=a+b;d=b-10;e=20+a;cout c=;c.Print();cout d=;d.Print();cout e=;e.Print();第6章 多态性相当于函数调用相当于函数调用“c=operator+(a,b)”单目运算符也可以重载为类的友单目运算符也可以重载为类的友元函数

15、,该友元函数有一个参数。元函数,该友元函数有一个参数。返 回void main()CShape*ps3;CShape s(Red);CPoint p1(10,10),p2(100,100),p3(50,50);CLine l(p1,p2,Green);CCircle c(p3,20,Black);ps0=&s;ps1=&l;ps2=&c;for(int i=0;iDraw();第6章 多态性 虽然父类的指针可以指向子类的对象,但调用虽然父类的指针可以指向子类的对象,但调用的函数的函数Draw()都是父类()都是父类CShape的成员函数的成员函数 为了能通过基类的为了能通过基类的指针调用派生类

16、的成指针调用派生类的成员函数,可以使用虚员函数,可以使用虚函数的方法,即把成函数的方法,即把成员函数员函数Draw()声()声明为虚函数。明为虚函数。#include#include using namespace std;class CPointprivate:int X;int Y;public:CPoint(int x=0,int y=0)X=x;Y=y;CPoint(CPoint&p)X=p.X;Y=p.Y;int GetX()return X;int GetY()return Y;第6章 多态性class CShapeprivate:char Color10;public:CShap

17、e(char*c)strcpy(Color,c);virtual void Draw()cout Draw a Shape.The color is Color endl;void PrintColor()cout Color endl;第6章 多态性class CLine:public CShapeprivate:CPoint Start;CPoint End;public:CLine(CPoint s,CPoint e,char*c):CShape(c),Start(s),End(e)virtual void Draw()cout Draw a Line from(Start.GetX()

18、,Start.GetY();cout )to(End.GetX(),End.GetY(),with color;PrintColor();第6章 多态性class CCircle:public CShapeprivate:CPoint Center;int Radius;public:CCircle(CPoint ctr,int r,char*c):CShape(c),Center(ctr)Radius=r;virtual void Draw()cout Draw a Circle at center(Center.GetX(),;cout Center.GetY()with radius R

19、adius and color;PrintColor();第6章 多态性void main()CShape*ps3;CShape s(Red);CPoint p1(10,10),p2(100,100),p3(50,50);CLine l(p1,p2,Green);CCircle c(p3,20,Black);ps0=&s;ps1=&l;ps2=&c;for(int i=0;iDraw();第6章 多态性第6章 多态性第6章 多态性#include using namespace std;class Aprivate:int a;public:virtual void func();class

20、B:public A private:int b;public:virtual void func()virtual void func1();第6章 多态性第6章 多态性第6章 多态性#include#include using namespace std;class CEmployeeprivate:char*name;int age;public:CEmployee(char*n,int a);virtual CEmployee();CEmployee:CEmployee(char*n,int a)name=new charstrlen(n)+1;strcpy(name,n);age=a

21、;第6章 多态性CEmployee:CEmployee()cout Destruct CEmployee endl;if(name)delete name;第6章 多态性CTeacher:CTeacher()cout Destruct CTeacher endl;if(mainCourse)delete mainCourse;void main(void)CEmployee*p3;p0=new CEmployee(Name1,20);p1=new CTeacher(Name2,C for 2 years,C+3 years,26);p2=new CTeacher(Name3,Data stru

22、cture for 2 years,C+3 years,30);for(int i=0;i3;i+)delete pi;第6章 多态性由于未调用由于未调用CTeacher类析构类析构函数,导致成员函数,导致成员mainCourse空间未被释放空间未被释放第6章 多态性class CShapeprivate:char Color10;public:CShape(char*c)strcpy(Color,c);virtual void Draw()0;void PrintColor()cout Color endl;第6章 多态性void main()CShape*ps3;CPoint p1(10,10),p2(100,100),p3(50,50);CLine l(p1,p2,Green);CCircle c(p3,20,Black);ps1=&l;ps2=&c;for(int i=1;iDraw();不能定义不能定义CShape类的对象,类的对象,但可以定义但可以定义CShape类的指针类的指针 返 回第6章 多态性第6章 多态性

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C++程序设计教程与实验指导》课件第6章多态性.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|