面向对象程序设计基础课件_第1页
面向对象程序设计基础课件_第2页
面向对象程序设计基础课件_第3页
面向对象程序设计基础课件_第4页
面向对象程序设计基础课件_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本讲主要内容:面向对象的基本思想类和对象概念及举例属性和方法类成员的访问控制构造函数和析构函数封装、继承、多态 第1页,共27页。面向对象技术的由来面向过程的设计方法(结构化程序设计方法)的不足:功能和数据分离,不符合人们对事物的认识,难以保证数据和功能的相容性基于模块的设计方法,使软件修改困难自顶向下的设计方法,限制了软件的可重用性,降低了开发效率,维护困难第2页,共27页。面向对象设计方法把数据和对数据的操作作为一个相互依赖不可分割的整体,符合人们的思维习惯采用数据抽象和信息隐蔽技术,使问题简单化有助于控制软件的复杂性,提高软件的生产效率第3页,共27页。其他程序设计方法面向过程的设计方法

2、:在科学计算中仍有其优势面向逻辑的设计方法:人工智能面向规则的设计方法:专家系统第4页,共27页。类类是对象的符号表示形式。类描述组成对象的属性、方法和事件等。类通常同时包含定义和实现,但它也可以包含没有实现的一个或多个成员。类的概念类似于面向过程程序开发中的数据类型(结构)概念。第5页,共27页。C+类声明class Rectangleprivate: int a,b;public:int Square()return a*b;int Girth()return 2*(a+b);void Assign(int x,int y)a=x;b=y;定义了一个类,名为Rectangle类中包含了两个

3、私有成员(属性)a,b,分别为长方型的长和宽。类中包含了三个成员函数(方法),分别计算长方形的周长、面积和为a,b赋值。private表示a,b只能在类内部使用。public表示表示三个函数可以在类外被调用第6页,共27页。类Rectangle包含了长方形的静态特征长和宽,类似结构,还可以包含更多的属性,类型可各不相同。类Rectangle也包含了长方形的行为特征(成员函数),周长和面积的计算。类中的方法可以在类外定义,如:class Rectangleprivate: int a,b;public:int Square();int Girth();void Assign(int x,int

4、y);int Rectangle:Square()return a*b;int Rectangle:Girth()return 2*(a+b);void Rectangle:Assign(int x,int y)a=x;b=y;第7页,共27页。对象object类描述对象的“结构”,而对象则是类的可用“实例”。每个实例都是其类的一个精确而又不同的副本。所以创建对象的动作就称为“实例化”。一个类也可以用于根据需要创建多个对象。类也可以通过封装来控制用户对对象项的访问。对象的概念类似面向过程程序设计中的变量概念。第8页,共27页。举例:对上例中定义的类的应用void main()Rectangle

5、 aRectangle;/声明了一个名为aRectangle对象 aRectangle.Assign(2,2);/为该对象的私有成员a,b赋值,即/aRectangle.a=2;aRectangle.b=2coutaRectangle.Square()endl;/调用该对象Square方法,输出该对象/的面积类是一个抽象概念,而对象是具体的实例。类就如同人的抽象概念,人都具有共同的外部特征和行为特征,就象类的属性和方法,而对一个具体的人,就是一个人的实例,他自然具有人都具有共同的外部特征和行为特征。第9页,共27页。private和public成员class Rectanglepublic:

6、int a,b;int Square()return a*b;int Girth()return 2*(a+b);修改上述程序:把a,b也定义成public,则可以不需要Assign方法:void main()Rectangle r;r.a=2; /在类外访问publicr.b=2;/属性a和b。couta=2; r-b=2;coutSquare();对指针,必须先创建对象,后使用该对象。对指针指向对象成员的访问类似结构指针,用符号-。第11页,共27页。建立一个三角型类(TriAngle):字段:三条边长方法:计算面积Area计算周长Girth计算三个内角InteralAngle判断三角型类

7、型(是等腰BothSame,是等边AllSame还是直角RightTriAngle三角形是钝角obtuse三角形还是锐角sharp三角形。第12页,共27页。面向对象的特征之一:封装“封装”是包含和控制访问一组关联项的能力。类提供一个最通用的方式来封装项。封装使您可以将 类中的数据和过程作为一个单元来使用。您可以同时处理多个对象而不会混淆,因为每个对象都由该类的一个唯一实例来表示。封装还使您可以控制如何使用数据和过程。可以使用访问修饰符(如 Private 或 Protected)来防止外部过程执行类方法或读取与修改属性和字段中的数据。第13页,共27页。面向对象的特征之一:封装应当将类的内部

8、详细信息声明为 Private 以防止在类外使用它们,此技术称为“数据隐藏”。隐藏类的实现详细信息可以防止这些信息被以不希望的方式使用。第14页,共27页。例:关于封装上例中可以在Rectangle中定义public int a,b;则在Main中可以用R.a和R.b访,无法通过类内部机制对a,b的合法性控制。定义private int a,b;可以防止外部程序修改字段a,b,而通过Assign对字段a,b赋值可以对字段值地合法性进行检查。上述思路对类方法同样适用。第15页,共27页。构造函数为类中特殊的成员函数,在声明该类对象或新建该类对象时被调用。构造函数与类同名,并且没有返回类型,包括v

9、oid。构造函数可以包含参数。第16页,共27页。例:使用构造函数重写Rectangle类#include class Rectangleprivate: int a,b;public: Rectangle(int x,int y )a=x;b=y;int Square()return a*b;int Girth()return 2*(a+b);void main()/Rectangle r(2,2);/使用对象Rectangle *r; /使用指针r=new Rectangle(2,2);/coutr.Square();coutSquare();在定义对象或新建对象时,通过构造函数把参数值传

10、递给属性。定义构造函数参数可以指定缺省值。Rectangle(int x=3,int y=7),则定义对象时可以不使用参数,参数值取缺省值。第17页,共27页。析构函数析构函数为类中特殊的成员函数,其函数名规定为类名请加。析构函数在对象消亡时被自动调用。析构函数没有返回类型,也不能有参数。析构函数一般包含对在对象生存期内申请的资源进行释放的程序。第18页,共27页。面向对象的特征之二:继承类使你可以定义封装一组相关项的数据类型。然而与结构不同的是,类可以继承和扩展其他类的特性。作为新类的基础的类称为“基类”。从基类派生的类称为“派生类”。派生类继承基类中定义的属性、方法和事件。这就意味着可以开

11、发和调试类一次,然后将其作为其他类的基础重复使用。第19页,共27页。例:建立一个正方型形的类,实现面积和周长及其内接圆面积的计算。#include class Rectanglepublic: int a,b;Rectangle(int x=3,int y=4 )a=x;b=y;public:int Area()return a*b;int Girth()return 2*(a+b);class Square:public Rectangle/公有继承Rectangle public: Square(int x):Rectangle(x,x) /调用父类构造函数 double InCircl

12、eArea() return 3.14*(a/2)*(a/2); ;void main()Square r(2);cout正方形面积:r.Area();cout内接圆面积:r.InCircleArea();调用了基类(父类)的Area()成员函数。第20页,共27页。补充:Protected成员Protected成员,只能被类内部和其派生类访问。第21页,共27页。继承的种类public派生:继承而来的成员访问权限不变。protected派生:继承而来的成员访问权限public和protected都变成protected。private派生:继承而来的成员访问权限都变成private。第22页

13、,共27页。例:建立三角形,等腰三角型到等腰直角三角形的类继承关系等腰三角形继承三角型类只需要已知两条边长。判断是否为直角等腰三角形(方法的重写)计算面积(方法的重写)直角等腰三角形继承等腰三角形类只需要已知一条直角边长。计算面积(方法的重写)第23页,共27页。面向对象的特征之三:多态静态多态-函数重载:基于不同的参数列表,同一个函数名字可以指向不同的函数定义。函数重载中具体调用什么函数在编译时就已经确定。 动态多态-允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。动态多态实现是在执行过程中 第24页,共27页。

14、函数重载#include int max(int x,int y)couty?x:y;float max(float x,float y)couty?x:y;void main()int a,b;float c,d;cinab;coutmax(a,b)cd;coutmax(c,d)endl;1 2integer:21 2Float:2如程序中要写两个函数,分别计算圆面积和正方形面积,函数名可取同名Area。第25页,共27页。动态多态#include #define PI 3.14class Shape public: /下面定义一个虚拟函数virtual float Area()return

15、 0;class Square:public Shapeint a;public:Square(int x) a=x;float Area()return (float)a*a;class Circle:public Shapepublic:int r;Circle(int x)r=x;float Area()return (float)PI*r*r;bool IsLarger(Shape &a,Shape &b) /不论a,b是什么形状if(a.Area()b.Area()return true;elsereturn false;void main()Circle c(2);Square s

16、(2);if(IsLarger(c,s)cout圆面积大于正方形面积。;elsecoutb.Area()时,实际调用的不是shape中的Area,而是Square和Circle中的Area。尝试把virtual去除,则调用的都将是Shape中的Area,始终输出“正方形面积大于圆面积。” 。上例使用了对象引用,也可以使用对象指针实现多态,但不能使用对象变量。第26页,共27页。使用对象指针bool IsLarger(Shape *a,Shape *b)if(a-Area()b-Area()return true;elsereturn false;void main()Circle c(2);/Circle c=new Circle(2);Square s(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论