欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    面向对象程序设计讲义.pptx

    • 资源ID:87550336       资源大小:204.79KB        全文页数:37页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向对象程序设计讲义.pptx

    #include#includeclass point protected:int x,y;public:point(int x,int y)point:x=x;point:y=y;virtual void show()/定义虚函数 putpixel(x,y,getcolor();第1页/共37页class circles:public point class circles:public point int radius;int radius;public:public:circles circles(int x,int y,int radius):point(x,y)(int x,int y,int radius):point(x,y)circles:radius=radius;circles:radius=radius;void show()void show()circles(x,y,radius);circles(x,y,radius);第2页/共37页main()main()main()main()point p1(10,10);point p1(10,10);point p1(10,10);point p1(10,10);circles c1(100,100,50);circles c1(100,100,50);circles c1(100,100,50);circles c1(100,100,50);setcolor(14);setcolor(14);setcolor(14);setcolor(14);point *ptr;point *ptr;point *ptr;point *ptr;/定义指向基类的指针定义指向基类的指针定义指向基类的指针定义指向基类的指针 ptr=&p1;ptr=&p1;ptr=&p1;ptr=&p1;/指针指向基类指针指向基类指针指向基类指针指向基类对象对象对象对象p1p1p1p1 ptr-show();ptr-show();ptr-show();ptr-show();/调用调用调用调用p1p1p1p1对象的对象的对象的对象的show()show()show()show()ptr=&c1;ptr=&c1;ptr=&c1;ptr=&c1;/指针指向指针指向指针指向指针指向对象对象对象对象c c c c1 1 1 1 ptr-show();ptr-show();ptr-show();ptr-show();/调用调用调用调用c c c c1 1 1 1对象的对象的对象的对象的show()show()show()show()第3页/共37页12.2 虚 函 数12.2.1 12.2.1 对象指针对象指针1 1.一般对象的指针一般对象的指针 语法与指向一般变量的指针相同。语法与指向一般变量的指针相同。2.2.引入派生类后的对象指针引入派生类后的对象指针 任何被说明为指向基类的指针都可以指向它的公有派生类。任何被说明为指向基类的指针都可以指向它的公有派生类。使用派生类对象指针时应注意的问题:使用派生类对象指针时应注意的问题:(1 1)可以用一个声明让指向基类对象的指针指向它的公有派生)可以用一个声明让指向基类对象的指针指向它的公有派生的对象。禁止指向私有派生的对象。的对象。禁止指向私有派生的对象。(2 2)不能将一个声明为指向派生类对象的指针指向其基类的一)不能将一个声明为指向派生类对象的指针指向其基类的一个对象。个对象。第4页/共37页(3 3)声明为指向基类对象的指针,当其指向派生类对象时,只)声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问派生类中从基类继承来的成员,不能访问公能利用它来直接访问派生类中从基类继承来的成员,不能访问公有派生类中特定的成员。有派生类中特定的成员。12.2.2 12.2.2 为什么要引入虚函数为什么要引入虚函数#includeincludeclass base class base public:public:void who()void who()cout“this is the class of base!n”;cout“this is the class of base!n”;第5页/共37页class derive1:public base class derive1:public base class derive1:public base class derive1:public base public:public:public:public:void who()void who()void who()void who()cout cout cout cout“this is the class of derive1!nthis is the class of derive1!nthis is the class of derive1!nthis is the class of derive1!n”;class derive2:public base class derive2:public base class derive2:public base class derive2:public base public:public:public:public:void who()void who()void who()void who()cout cout cout coutwho();p-who();p=&obj2;p=&obj2;p-who();p-who();p=&obj3;p=&obj3;p-who();p-who();obj2.who();obj2.who();obj3.who();obj3.who();第7页/共37页运行结果:运行结果:运行结果:运行结果:this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of base!this is the class of derive1!this is the class of derive1!this is the class of derive1!this is the class of derive1!this is the class of derive2!this is the class of derive2!this is the class of derive2!this is the class of derive2!从结果可以看出,通过指针引起的普通成员函数调用,从结果可以看出,通过指针引起的普通成员函数调用,从结果可以看出,通过指针引起的普通成员函数调用,从结果可以看出,通过指针引起的普通成员函数调用,仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。第8页/共37页12.2.3 12.2.3 12.2.3 12.2.3 虚函数的定义及使用虚函数的定义及使用虚函数的定义及使用虚函数的定义及使用1.1.1.1.虚函数的定义虚函数的定义虚函数的定义虚函数的定义#includeincludeincludeincludeclass base class base class base class base /./././.public:public:public:public:virtual void who()virtual void who()virtual void who()virtual void who()/定义虚函数定义虚函数定义虚函数定义虚函数 cout“base!n”;cout“base!n”;cout“base!n”;cout“base!n”;class frist:public base class frist:public base class frist:public base class frist:public base /./././.public:public:public:public:void who()void who()void who()void who()/重重重重新定义虚函数新定义虚函数新定义虚函数新定义虚函数 cout“the first derivationn”;cout“the first derivationn”;cout“the first derivationn”;cout“the first derivationn”;第9页/共37页class second:public base class second:public base class second:public base class second:public base /./././.public:public:public:public:void who()void who()void who()void who()/重重重重新定义虚函数新定义虚函数新定义虚函数新定义虚函数 cout“the second derivationn”;cout“the second derivationn”;cout“the second derivationn”;coutwho();ptr-who();ptr-who();ptr-who();/调用调用调用调用basebasebasebase类的类的类的类的who()who()who()who()版本版本版本版本第10页/共37页 ptr=&obj2;ptr=&obj2;ptr=&obj2;ptr=&obj2;ptr-who();ptr-who();ptr-who();ptr-who();/调用调用调用调用firstfirstfirstfirst类的类的类的类的who()who()who()who()版本版本版本版本 ptr=&obj3;ptr=&obj3;ptr=&obj3;ptr=&obj3;ptr-who();ptr-who();ptr-who();ptr-who();/调用调用调用调用secondsecondsecondsecond类的类的类的类的who()who()who()who()版本版本版本版本 运行结果:运行结果:运行结果:运行结果:base base base base the first derivation the first derivation the first derivation the first derivation the second derivation the second derivation the second derivation the second derivation第11页/共37页2.2.2.2.虚函数与重载函数的关系虚函数与重载函数的关系虚函数与重载函数的关系虚函数与重载函数的关系3.3.3.3.多继承中的虚函数多继承中的虚函数多继承中的虚函数多继承中的虚函数#includeincludeincludeincludeclass a class a class a class a public:public:public:public:virtual void f()virtual void f()virtual void f()virtual void f()/定义定义定义定义f()f()f()f()为虚函数为虚函数为虚函数为虚函数 coutcoutcoutcout“class anclass anclass anclass an”;class b class b class b class b public:public:public:public:void f()void f()void f()void f()/定义定义定义定义f()f()f()f()为一般函数为一般函数为一般函数为一般函数 coutcoutcoutcout“class bnclass bnclass bnclass bn”;第12页/共37页class aa:public a,public b class aa:public a,public b class aa:public a,public b class aa:public a,public b public:public:public:public:void f()void f()void f()void f()cout cout cout coutf();ptr1-f();ptr1-f();ptr1-f();/调用调用调用调用a a a a类的类的类的类的f()f()f()f()ptr2=&obj2;ptr2=&obj2;ptr2=&obj2;ptr2=&obj2;/将将将将指针指针指针指针ptr2ptr2ptr2ptr2指向指向指向指向b b b b类对象类对象类对象类对象 ptr2-f();ptr2-f();ptr2-f();ptr2-f();/调用调用调用调用b b b b类的类的类的类的f()f()f()f()第13页/共37页 ptr1=&obj3;ptr1=&obj3;/将将指针指针ptr1ptr1指向指向a a类的派生类类的派生类aaaa类的对象类的对象 ptr1-f();ptr1-f();/调用调用aaaa类的类的f(),f(),此时的此时的f()f()为虚函数为虚函数 ptr2=&obj3;ptr2=&obj3;/将将指针指针ptr2ptr2指向指向b b类的派生类类的派生类aaaa类的对象类的对象 ptr2-f();ptr2-f();/调用调用b b类的类的f(),f(),此处此处f()f()为非虚函数,而为非虚函数,而ptr2ptr2 /又为又为b b的指针的指针 运行结果:运行结果:class aclass aclass bclass bclass aaclass aaclass bclass b第14页/共37页若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它的派生类的派生类。的派生类的派生类。的派生类的派生类。的派生类的派生类。4.4.4.4.基类构造函数调用虚函数基类构造函数调用虚函数基类构造函数调用虚函数基类构造函数调用虚函数 自学自学自学自学第15页/共37页12.2.4 12.2.4 12.2.4 12.2.4 虚函数举例虚函数举例虚函数举例虚函数举例例例例例 3 3 3 3/-/-/-/-#include#include#include#include#pragma hdrstop#pragma hdrstop#pragma hdrstop#pragma hdrstop#include U12_2_4_3.h#include U12_2_4_3.h#include U12_2_4_3.h#include U12_2_4_3.h/-/-/-/-#pragma package(smart_init)#pragma package(smart_init)#pragma package(smart_init)#pragma package(smart_init)#pragma resource*.dfm#pragma resource*.dfm#pragma resource*.dfm#pragma resource*.dfmTf12_2_4_3*f12_2_4_3;Tf12_2_4_3*f12_2_4_3;Tf12_2_4_3*f12_2_4_3;Tf12_2_4_3*f12_2_4_3;/*-/*-/*-/*-/enum bool false,true;/enum bool false,true;/enum bool false,true;/enum bool false,true;第16页/共37页struct element struct element struct element struct element /定义链表中的结点结构定义链表中的结点结构定义链表中的结点结构定义链表中的结点结构 int val;int val;int val;int val;element*next;element*next;element*next;element*next;class list /class list /class list /class list /定义链表类定义链表类定义链表类定义链表类 element*elems;element*elems;element*elems;element*elems;public:public:public:public:list()elems=0;list()elems=0;list()elems=0;list()elems=0;list();list();list();list();virtual bool insert(int);virtual bool insert(int);virtual bool insert(int);virtual bool insert(int);/定义虚函数定义虚函数定义虚函数定义虚函数 virtual bool deletes(int);virtual bool deletes(int);virtual bool deletes(int);virtual bool deletes(int);/定义虚函数定义虚函数定义虚函数定义虚函数 bool contain(int);bool contain(int);bool contain(int);bool contain(int);void print();void print();void print();void print();第17页/共37页class set:public list class set:public list class set:public list class set:public list int card;int card;int card;int card;public:public:public:public:set()card=0;set()card=0;set()card=0;set()card=0;bool insert(int);bool insert(int);bool insert(int);bool insert(int);/重重重重定义虚函数定义虚函数定义虚函数定义虚函数 bool deletes(int);bool deletes(int);bool deletes(int);bool deletes(int);/重重重重定义虚函数定义虚函数定义虚函数定义虚函数;list:list()list:list()list:list()list:list()element*tmp=elems;element*tmp=elems;element*tmp=elems;element*tmp=elems;for(element*elem=elems;elem!=0;)for(element*elem=elems;elem!=0;)for(element*elem=elems;elem!=0;)for(element*elem=elems;elem!=0;)tmp=elem;tmp=elem;tmp=elem;tmp=elem;elem=elem-next;elem=elem-next;elem=elem-next;elem=elem-next;delete tmp;delete tmp;delete tmp;delete tmp;第18页/共37页bool list:insert(int val)bool list:insert(int val)bool list:insert(int val)bool list:insert(int val)/定义定义定义定义listlistlistlist类中插入元素的成员函数类中插入元素的成员函数类中插入元素的成员函数类中插入元素的成员函数 element*elem=new element;element*elem=new element;element*elem=new element;element*elem=new element;/为新元素分配内存为新元素分配内存为新元素分配内存为新元素分配内存 if(elem!=0)if(elem!=0)if(elem!=0)if(elem!=0)elem-val=val;elem-val=val;elem-val=val;elem-val=val;/将元素插入链表头将元素插入链表头将元素插入链表头将元素插入链表头 elem-next=elems;elem-next=elems;elem-next=elems;elem-next=elems;elems=elem;elems=elem;elems=elem;elems=elem;return true;return true;return true;return true;else return false;else return false;else return false;else return false;第19页/共37页bool list:deletes(int val)bool list:deletes(int val)bool list:deletes(int val)bool list:deletes(int val)/定义定义定义定义listlistlistlist类中删除元素的成员函数类中删除元素的成员函数类中删除元素的成员函数类中删除元素的成员函数 if(elems=0)return false;if(elems=0)return false;if(elems=0)return false;if(elems=0)return false;/若表为空,返回若表为空,返回若表为空,返回若表为空,返回falsefalsefalsefalse element*tmp=elems;element*tmp=elems;element*tmp=elems;element*tmp=elems;if(elems-val=val)if(elems-val=val)if(elems-val=val)if(elems-val=val)/若待删除的元素为链表头若待删除的元素为链表头若待删除的元素为链表头若待删除的元素为链表头元素元素元素元素 elems=elems-next;elems=elems-next;elems=elems-next;elems=elems-next;delete tmp;delete tmp;delete tmp;delete tmp;return true;return true;return true;return true;else else else else第20页/共37页for(element*elem=elems;elem-next!=0;elem-next)for(element*elem=elems;elem-next!=0;elem-next)for(element*elem=elems;elem-next!=0;elem-next)for(element*elem=elems;elem-next!=0;elem-next)if(elem-next-val=val)if(elem-next-val=val)if(elem-next-val=val)if(elem-next-val=val)/循环查找待删除元素循环查找待删除元素循环查找待删除元素循环查找待删除元素 tmp=elem-next;tmp=elem-next;tmp=elem-next;tmp=elem-next;elem-next=tmp-next;elem-next=tmp-next;elem-next=tmp-next;elem-next=tmp-next;delete tmp;delete tmp;delete tmp;delete tmp;return true;return true;return true;return true;return false;return false;return false;return false;第21页/共37页bool list:contain(int val)bool list:contain(int val)bool list:contain(int val)bool list:contain(int val)/判元素判元素判元素判元素valvalvalval在链表中是否存在在链表中是否存在在链表中是否存在在链表中是否存在 if(elems=0)return false;if(elems=0)return false;if(elems=0)return false;if(elems=0)return false;if(elems-val=val)return true;if(elems-val=val)return true;if(elems-val=val)return true;if(elems-val=val)return true;else else else else for(element*elem=elems;elem-next!=0;elem=elem-for(element*elem=elems;elem-next!=0;elem=elem-for(element*elem=elems;elem-next!=0;elem=elem-for(element*elem=elems;elem-next!=0;elem=elem-next)next)next)next)if(elem-next-val=val)if(elem-next-val=val)if(elem-next-val=val)if(elem-next-val=val)return true;return true;return true;return true;return false;return false;return false;return false;第22页/共37页void list:print()void list:print()void list:print()void list:print()if(elems=0)return;if(elems=0)return;if(elems=0)return;if(elems=0)return;int i=1;int i=1;int i=1;int i=1;static int j=0;static int j=0;static int j=0;static int j=0;j+;j+;j+;j+;for(element*elem=elems;elem!=0;elem=elem-next)for(element*elem=elems;elem!=0;elem=elem-next)for(element*elem=elems;elem!=0;elem=elem-next)for(element*elem=elems;elem!=0;elem=elem-next)f12_2_4_3-Canvas-TextOut(30*i+,20*j,f12_2_4_3-Canvas-TextOut(30*i+,20*j,f12_2_4_3-Canvas-TextOut(30*i+,20*j,f12_2_4_3-Canvas-TextOut(30*i+,20*j,IntToStr(elem-val);IntToStr(elem-val);IntToStr(elem-val);IntToStr(elem-val);第23页/共37页bool set:insert(int val)bool set:insert(int val)bool set:insert(int val)bool set:insert(int val)/在在在在setsetsetset类中的类中的类中的类中的insertinsertinsertinsert的重定义版本的重定义版本的重定义版本的重定义版本 if(!contain(val)&list:insert(val)if(!contain(val)&list:insert(val)if(!contain(val)&list:insert(val)if(!contain(val)&list:insert(val)/先判断此元素是否已存在,然后再调用基类的此函数版本先判断此元素是否已存在,然后再调用基类的此函数版本先判断此元素是否已存在,然后再调用基类的此函数版本先判断此元素是否已存在,然后再调用基类的此函数版本 +card;card;card;card;return true;return true;return true;return true;return false;return false;return false;return false;第24页/共37页bool set:deletes(int val)bool set:deletes(int val)bool set:deletes(int val)bool set:deletes(int val)/在在在在setsetsetset类中的类中的类中的类中的deletesdeletesdeletesdeletes重定义版本重定义版本重定义版本重定义版本 if(list:deletes(val)if(list:deletes(val)if(list:deletes(val)if(list:deletes(val)/调用基类调用基类调用基类调用基类中的此函数版本中的此函数版本中的此函数版本中的此函数版本 -card;card;card;card;return true;return true;return true;return true;return false;return false;return false;return false;/*-/*-/*-/*-_fastcall Tf12_2_4_3:Tf12_2_4_3(TComponent*Owner)_fastcall Tf12_2_4_3:Tf12_2_4_3(TComponent*Owner)_fastcall Tf12_2_4_3:Tf12_2_4_3(TComponent*Owner)_fastcall Tf12_2_4_3:Tf12_2_4_3(TComponent*Owner):TForm(Owner):TForm(Owner):TForm(Owner):TForm(Owner)第25页/共37页void _fastcall Tf12_2_4_3:btnRunClick(TObject*Sender)void _fastcall Tf12_2_4_3:btnRunClick(TObject*Sender)void _fastcall Tf12_2_4_3:btnRunClick(TObject*Sender)void _fastcall Tf12_2_4_3:btnRunClick(TObject*Sender)list*ptr,list1;list*ptr,list1;list*ptr,list1;list*ptr,list1;/定义基类对象定义基类对象定义基类对象定义基类对象list1list1list1list1和基类指针和基类指针和基类指针和基类指针ptrptrptrptr set set1;set set1;set set1;set set1;/定义定义定义定义setsetsetset类对象类对象类对象类对象 ptr=&list1;ptr=&list1;ptr=&list1;ptr=&list1;/将指针将指针将指针将指针ptrptrptrptr指向指向指向指向list1list1list1list1对象对象对象对象 ptr-insert(30);ptr-insert(30);ptr-insert(30);ptr-insert(30);/调用调用调用调用listlistlistlist类中的类中的类中的类中的insertinsertinsertinsert版本版本版本版本 ptr-insert(40);ptr-insert(40);ptr-insert(40);ptr-insert(40);ptr-insert(543);ptr-insert(543);ptr-insert(543);ptr-insert(543);ptr-insert(40);ptr-insert(40);ptr-insert(40);ptr-insert(40);ptr-print();ptr-print();ptr-print();ptr-print();/调用调用调用调用listlistlistlist类中的成员函数类中的成员函数类中的成员函数类中的成员函数 ptr=&set1;ptr=&set1;ptr=&set1;ptr=&set1;/将指针将指针将指针将指针ptrptrptrptr指向指向指向指向setsetsetset对象对象对象对象 ptr-insert(23);ptr-insert(23);ptr-insert(23);ptr-insert(23);/调用调用调用调用setsetsetset类中的类中的类中的类中的insertinsertinsertinsert版本版本版本版本 ptr-insert(672);ptr-insert(672);ptr-insert(672);ptr-insert(672);第26页/共37页 ptr-insert(456);ptr-insert(456);ptr-insert(456);ptr-insert(456);ptr-insert(23);ptr-insert(23);ptr-insert(23);ptr-insert(23);ptr-print();ptr-print();ptr-print();ptr-print();/调用调用调用调用lislislislist t t t类中的成员函数类中的成员函数类中的成员函数类中的成员函数 /-/-/-/-void _fastcall Tf12_2_4_3:btnEndClick(TObjec

    注意事项

    本文(面向对象程序设计讲义.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开