面向对象技术讲解学习

上传人:yuzo****123 文档编号:139716592 上传时间:2020-07-23 格式:PPT 页数:67 大小:551KB
返回 下载 相关 举报
面向对象技术讲解学习_第1页
第1页 / 共67页
面向对象技术讲解学习_第2页
第2页 / 共67页
面向对象技术讲解学习_第3页
第3页 / 共67页
面向对象技术讲解学习_第4页
第4页 / 共67页
面向对象技术讲解学习_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《面向对象技术讲解学习》由会员分享,可在线阅读,更多相关《面向对象技术讲解学习(67页珍藏版)》请在金锄头文库上搜索。

1、面向对象技术,赵长宽 东北大学计算中心 电话:87602 地址:辽宁省沈阳市和平区文化路3号巷11号 电子邮件:,程序设计基础系列课程程序设计技术,前期课程:高级语言程序设计 后期课程:计算机软件技术基础,教学内容,多态性 打破封装-静态成员、友元 高级代码重用-函数模板和类模板 STL模板,继承实现派生类直接使用继承类的成员变量和函数(属性和方法)。是一种重用机制,即派生类具有继承类的所有的特征。 多态性是之相同的行为在派生类中具有不同的形态。例如几何图形中,定义基类Shape,其中三角(Triangle)、矩形(Rectangle)、圆(Circle)均是此Shape的派生类,所有的类均有

2、Draw方法,但是Draw方法的具体实现不同。,多态性与继承,Triangle,Circle,Rectangle,现需要编译一个绘图Painter用于绘制图形,能够绘制所有图形。,class Painter public: void draw(Shape,多态性实现了通过继承类的对象的引用,调用派生类对象方法的机制,虚函数指在继承类中声明,但是没有定义的函数,需要在派生类中定义的函数。实质为函数指针,虚函数,声明语法: 普通虚函数: Virtual 函数类型 函数名称(函数参数); 纯虚函数: Virtual 函数类型 函数名称(函数参数)=0;,区别:普通虚函数允许在继承类中有定义,而纯虚函

3、数没有。,Painter用于绘制图形,能够绘制三角(Triangle)、矩形(Rectangle)、圆(Circle)等图形。,Painter -案例,class Painter public: void draw(Shape Painter:Painter() Painter:Painter() ,void Painter:draw(Shape ,Shape是图形的基类,派生了三角(Triangle)、矩形(Rectangle)、圆(Circle)等图形类。,Shape -案例,class Shape public: int id; public: Shape(); Shape(int id

4、); virtual Shape(); public: /*纯虚函数*/ virtual void draw()=0; /*虚函数 打印对象基本信息*/ virtual void print(); ;,Shape:Shape():id(0) Shape:Shape(int id) this-id=id; Shape:Shape() void Shape:print() coutShape Objectthisendl; coutId:idendl; ,Shape是图形的基类,派生了三角(Triangle)、矩形(Rectangle)、圆(Circle)等图形类。,Shape -案例,class

5、 Shape public: int id; public: Shape(); Shape(int id); virtual Shape(); public: /*纯虚函数*/ virtual void draw()=0; /*虚函数 打印对象基本信息*/ virtual void print(); ;,Shape:Shape():id(0) Shape:Shape(int id) this-id=id; Shape:Shape() void Shape:print() coutShape Objectthisendl; coutId:idendl; ,Triangle三角形,Triangle

6、 -案例,#include Shape.h class Triangle : public Shape public: float a,b,c; public: Triangle(); Triangle(int id,float a,float b,float c); virtual Triangle(); virtual void draw(); virtual void print(); ;,Triangle:Triangle() Triangle:Triangle(int id,float a,float b,float c):Shape(id) this-a=a; this-b=b;

7、this-c=c; Triangle:Triangle() void Triangle:draw() coutDraw Trianglethisendl; void Triangle:print() coutTriangle Objectthisendl; coutId:idendl; cout(a,b,c):,a,b,cendl; ,Rectangle矩形,Rectangle -案例,class Rectangle : public Shape public: Rectangle(); Rectangle(int id,float a,float b); virtual void draw(

8、); virtual void print(); virtual Rectangle(); public: float a,b; ;,Rectangle:Rectangle() Rectangle:Rectangle(int id,float a,float b):Shape(id) this-a=a; this-b=b; Rectangle:Rectangle() void Rectangle:draw() coutDraw Rectanglethisendl; void Rectangle:print() coutRectangle Objectthisendl; coutId:idend

9、l; cout(a,b):,a,bendl; ,主函数与运行结果,#include Rectangle.h #include triangle.h #include Painter.h int main() Painter painter; Triangle triangle(1,3,4,5); Rectangle rectangle(2,10,20); painter.draw(triangle); painter.draw(rectangle); triangle.print(); rectangle.print(); return 0; ,派生类重载的普通虚函数将自动调用继承类中对应的函

10、数 利用纯虚函数,基于继承类对象的引用可以直接调用派生类对象的方法,虚析构函数,基于“派生类重载的普通虚函数将自动调用继承类中对应的虚函数”特性,将派生类析构函数声明为虚函数,当派生类对象释放时将自动调继承类构造函数,虚析构函数,class Shape public: int id; public: virtual Shape(); ; class Triangle : public Shape public: float a,b,c; public: virtual Triangle(); ;,Shape:Shape() coutShape()thisendl; Triangle:Trian

11、gle() coutTriangle()thisendl; ,主函数与运行结果,#include Rectangle.h #include triangle.h #include Painter.h int main() Painter painter; Triangle triangle(1,3,4,5); return 0; ,首先调用派生类析构函数 其次调用父类析构函数,抽象类,具有纯虚函数的类称为抽象类。抽象类不能创建对象。,class Shape public: int id; public: Shape(); Shape(int id); virtual Shape(); publ

12、ic: /*纯虚函数*/ virtual void draw()=0; /*虚函数 打印对象基本信息*/ virtual void print(); ;,本类即为抽象类,抽象类与Java中接口,C+: struct ShapeInterface virtual void draw()=0; virtual void print()=0; ;,Java: public interface ShapeInterface void draw(); void print(); ,不包括成员变量的,仅仅由纯虚函数构成的类称为抽象类。其作用声明所有对象应当具有的功能接口规。,打破封装-静态成员、友元,静态

13、成员指静态成员变量、静态成员函数,静态成员,静态成员变量声明: class 类 访问性: static 类 对象名称; ;,class Book public: Book(); virtual Book(); char * getAutor()return author; public: char name64; char isbn64; public: static char author32; ;,静态成员指静态成员变量、静态成员函数,静态成员,静态成员变量初始化: class 类 数据类型 类:对象名称=初始化表达式; 或者 数据类型 类:对象名称(初始化表达式);,char Book:

14、author32=张三; char Book:author32(张三);,#include using namespace std; int main(int argc, char* argv) Book book1,book2; char *p1=book1.getAutor(); char *p2=book2.getAutor(); if(p1=p2) cout“所有Book对象的静态成员变量 的地址相同endl; coutbook1.getAutor()endl; coutbook2.getAutor()endl; return 0; ,对于整个类的所有对象来说静态成员变量是同一变量。,

15、静态成员指静态成员变量、静态成员函数,静态成员,静态成员变量使用: 基于“.”运算符 基于:运算符 编制专门的成员函数,char Book:author32=张三; char Book:author32(张三);,#include using namespace std; int main(int argc, char* argv) Book book1,book2; char *p2=book2.getAutor(); coutbook1.authorendl; coutBook:authorendl; return 0; ,存储类所有对象共享的数值信息 静态成员变量仅仅有一份,普通成员变量

16、是每个对象均有一份。 静态成员变量相当与C语言的中全局变量。 静态成员函数的使用与对象无关。,静态成员,对象A,对象B,对象C,对象C,类的所有对象共享的全局变量,静态成员指静态成员变量、静态成员函数,静态成员,静态成员函数声明: class 类 访问性: static 函数类型 函数名(函数参数); ;,class StringUtil public: static void copyString(char * s1,const char *s2); ;,静态成员,静态成员函数定义与普通成员函数的定义相同。,void StringUtil:copyString(char * s1,const cha

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号