面向对象程序设计讲义.pptx
《面向对象程序设计讲义.pptx》由会员分享,可在线阅读,更多相关《面向对象程序设计讲义.pptx(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#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
2、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);circl
3、es 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对象的对象的对象的对象的s
4、how()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.引入派生类后的对象
5、指针引入派生类后的对象指针 任何被说明为指向基类的指针都可以指向它的公有派生类。任何被说明为指向基类的指针都可以指向它的公有派生类。使用派生类对象指针时应注意的问题:使用派生类对象指针时应注意的问题:(1 1)可以用一个声明让指向基类对象的指针指向它的公有派生)可以用一个声明让指向基类对象的指针指向它的公有派生的对象。禁止指向私有派生的对象。的对象。禁止指向私有派生的对象。(2 2)不能将一个声明为指向派生类对象的指针指向其基类的一)不能将一个声明为指向派生类对象的指针指向其基类的一个对象。个对象。第4页/共37页(3 3)声明为指向基类对象的指针,当其指向派生类对象时,只)声明为指向基类对象
6、的指针,当其指向派生类对象时,只能利用它来直接访问派生类中从基类继承来的成员,不能访问公能利用它来直接访问派生类中从基类继承来的成员,不能访问公有派生类中特定的成员。有派生类中特定的成员。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 c
7、lass 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
8、: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();
9、第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
10、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!从结果可以看出,通过指针引起的普通成员函数调用,从结果可
11、以看出,通过指针引起的普通成员函数调用,从结果可以看出,通过指针引起的普通成员函数调用,从结果可以看出,通过指针引起的普通成员函数调用,仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。仅仅与指针的类型有关,而与此刻正指向什么对象无关。第8页/共37页12.2.3 12.2.3 12.2.3 12.2.3 虚函数的定义及使用虚函数的定义及使用虚函数的定义及使用虚函数的定义及使用1.1.1.1.虚函数的定义虚函数的定义虚函数的定义虚函数的定义#includeincludeincludeinclud
12、eclass 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 c
13、lass 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 c
14、lass 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();/调用调用调用调用basebaseb
15、asebase类的类的类的类的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();/调用调用调用调用secondsecond
16、secondsecond类的类的类的类的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.虚函数与重载函数的关系虚函数与重载函数的关系虚
17、函数与重载函数的关系虚函数与重载函数的关系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 a
18、n”;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,publ
19、ic 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
20、 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 /
21、又为又为b b的指针的指针 运行结果:运行结果:class aclass aclass bclass bclass aaclass aaclass bclass b第14页/共37页若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类若一个派生类,它的多个基类中有公共的基类,在公共基类中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚函数。中定义一个虚函数,则多级派生以后仍可以重新定义虚
22、函数。使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也使用级联式派生时要注意,指向派生类的指针不能继承。也就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它就是说,基类的指针可以指向它的派生类,但不能再指向它的派生类的派生类。的派生类的派生类。的派生类的派生类。的派生类的派生类。4.4.4.4.基类构造函数调用虚函数基类构造函数调用虚函数基类构造函数调用虚函数基类构造函数调用虚函数
23、自学自学自学自学第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
24、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;/en
25、um 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 /定义链表类定义链表类定义链表类定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 讲义
限制150内