C++程序设计基础第6-7讲 类和对象ppt课件_第1页
C++程序设计基础第6-7讲 类和对象ppt课件_第2页
C++程序设计基础第6-7讲 类和对象ppt课件_第3页
C++程序设计基础第6-7讲 类和对象ppt课件_第4页
C++程序设计基础第6-7讲 类和对象ppt课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序设计基础程序设计基础主讲人:曹岳辉 面向对象的基本概念面向对象的基本概念 类的定义格式类的定义格式 本卷须知本卷须知 C+,每个对象都是由数据和函数(即操作代码) 两部分组成。 数据体现了前面提到的“属性”。如一个三角形对象,它的3个边长就是它的属性。 函数是用来对数据进行操作的,以便实现某些功能(即行为)。例如可以通过边长计算出三角形的面积等,计算三角形面积就是前面提到的行为,在程序设计方法中也称为方法(method)。 调用对象中的函数就是向该对象传送一个消息(message),要求该对象实现某一行为(功能)。传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数

2、据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。面向对象程序设计的特点面向对象程序设计的特点面向对象程序设计面对的是一个个对象。其中每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。程序设计者的任务包括: 一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。对一个大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。面向对象的程序设计是以类和对象为基础的,程序的操作是围绕对象进行的,在此基础上利用了继承机制和多态性等。面向过程的结构化

3、程序设计中,常用以下公式来表述程序: 程序=算法数据结构面向对象程序设计就是把一个算法和一组数据结构封装在一个对象中。因此就形成了新的观念: 对象 = 算法 数据结构程序 = (对象+对象+对象+) + 音讯 或: 程序 = 对象s + 音讯随着软件规模的迅速增大,软件人员面临的问题十分复杂。需要规范整个软件开发过程,明确软件开发过程中每个阶段的任务,在保证前一个阶段工作的正确性的情况下,再进行下一阶段的工作。这就是软件工程学需要研究和解决的问题。面向对象的软件工程包括以下几个部分: 1. 1. 面向对象分析面向对象分析(object oriented analysis,OOA) (objec

4、t oriented analysis,OOA) 软件工程中的系统分析阶段,系统分析员要和用户结合在一起,软件工程中的系统分析阶段,系统分析员要和用户结合在一起,对用户的需求作出精确的分析和明确的描述,从宏观的角度概括对用户的需求作出精确的分析和明确的描述,从宏观的角度概括出系统应该做什么出系统应该做什么( (而不是怎么做而不是怎么做) )。面向对象的分析,要按照面。面向对象的分析,要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象事物之间的关系,归纳出有关的对象( (包括对象的属性和行为包括

5、对象的属性和行为) )以以及对象之间的联系,并将具有相同属性和行为的对象用一个类及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)(class)来表示。建立一个能反映真实工作情况的需求模型。来表示。建立一个能反映真实工作情况的需求模型。2. 2. 面向对象设计面向对象设计(object oriented design,OOD)(object oriented design,OOD)根据面向对象分析阶段形成的需求模型,对每一部分分别根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计。进行具体的设计。首先是进行类的设计,类的设计可能包含多个层次利用继首先是进行类的设

6、计,类的设计可能包含多个层次利用继承与派生)。然后以这些类为基础提出程序设计的思路和方法,承与派生)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。在设计阶段,并不牵涉某一种具体的计算包括对算法的设计。在设计阶段,并不牵涉某一种具体的计算机语言,而是用一种更通用的描述工具机语言,而是用一种更通用的描述工具( (如伪代码或流程图如伪代码或流程图) )来来描述。描述。3. 3. 面向对象编程面向对象编程OOPOOP)用一种计算机语言把它写成程序,显然应当选用面向对象用一种计算机语言把它写成程序,显然应当选用面向对象的计算机语言的计算机语言( (例如例如C+)C+),否则无法实现面向

7、对象设计的要求。,否则无法实现面向对象设计的要求。4. 4. 面向对象测试面向对象测试(object oriented test,OOT)(object oriented test,OOT)在写好程序后交给用户使用前,必须对程序进行严格的测试。在写好程序后交给用户使用前,必须对程序进行严格的测试。测试的目的是发现程序中的错误并改正它。面向对象测试是用面测试的目的是发现程序中的错误并改正它。面向对象测试是用面向对象的方法进行测试,以类作为测试的基本单元。向对象的方法进行测试,以类作为测试的基本单元。类的定义格式一般分为说明部分和实现部分。说明部分:是用来说明类中的成员,包含数据成员的说明和成员函

8、数的说明。成员函数是用来对数据成员进行操作的,也称为“方法”。实现部分:是用来对成员函数进行定义。说明部分的一般格式为:class 类类型名 private: 私有成员说明 public: 公有成员说明 ;程序中的任何函数都可访问私有访问权限,为默认值,可缺省除本类中的成员函数及友元外,其他类外函数不能访问。公有访问权限成员函数的说明形式与一般函数的说明形式一致数据成员的说明形式与变量的定义形式相似类名通常用T字母开始,以区别其他标识符类的实现部分即定义它的成员函数,方式与定义普通函数大体相同。若在类说明外部定义成员函数,则应使用作用域限定符:指明该函数是哪个类中的成员函数。格式为:类型 类名

9、:成员函数名参数表) 函数体如:void Tperson:print( ) coutnameagesex endl; 除特殊指明外,成员函数操作的是同一对象中的数据成员。其中如name等。若在成员函数中调用非成员函数没有类名的函数;全局函数),则可用不带类名的:来表示。int day;int year; ;由于类名是成员函数名的一部分,所以一个类的成员函数与另一个类的成员函数可同名若将内联成员函数定义在类说明之外则要加上inline。内联成员函数注注 意意错误void Tpoint:Move(int xOffset,int yOffset) X+=xOffset; Y+=yOffset; 类体

10、外成员函数的定义内联成员函数的定义私有数据成员的定义date1Set( )Print( )monthdayyear留意:在成员函数中访问成员无须加对象名来作为前缀。如:void Tperson:print( )/自家人不客气coutnameagesexWin32 Console Appliciation-C/C+ Header File;2、输入头文件内容并保存;3、 New - C+ Source File ,输入程序内容并保存;4、编译、构建、执行也可以先建立程序文件,编辑后再建立头文件,并将它加入工程即可!留意:程序与头文件要在同一目录!这也是前面的程序中可以没有构造和析构函数的原因函数

11、体内无代码,也可自定义一个无参的构造函数来替代缺省自定义无参构造函数重载构造函数注:若有构造注:若有构造函数的重载,函数的重载,则不会生成缺则不会生成缺省构造函数,省构造函数,须自定义无参须自定义无参构造函数!构造函数!CExample ( int i=8 ) ;可否?可否?对应调用相应的构造函数不带参数创建对象,调用无参构造函数CExample : CExample ( int x , int y ) member1 = x ; member2 = y ; void main( ) CExample ex1; CExample ex2(1); CExample ex3( 2, 3 ); 函数

12、名同类名只有一个引用参数配钥匙class CMyClass public: CMyClass ( int x = 0 ) ; CMyClass ( CMyClass & c ) ; / private: int member ; ; CMyClass : CMyClass ( int x ) member = x ; CMyClass : CMyClass ( CMyClass & c ) member = c . member ; 拷贝初始化构造函数带缺省值的构造函数调用拷贝初始化构造函数调用带缺省值的构造函数调用带缺省值的构造函数结果为:结果为:a.member:0a.me

13、mber:0b.member:3b.member:3c.member:3c.member:3funfun中的形参中的形参a a中的数据成员中的数据成员a.member:3a.member:3调用拷贝初始化构造函数class CPoint float x, y ;/未指明的是未指明的是private public: CPoint ( float a, float b ); CPoint Add ( CPoint A ); ;CPoint : CPoint ( float a, float b ) x = a ; y = b ;CPoint : Add ( CPoint A ) CPoint B;

14、 B.x = x + A.x ; B.y = y + A.y; return B; 内联函数和外联函数内联函数和外联函数 成员函数的重载性成员函数的重载性 设置参数的缺省值设置参数的缺省值内联函数:指定义在类体内的成员函数。外联函数:指说明在类体内,定义在类体外的成员函数。类外定义的函数缺省情况下都是外联函数,用关键字 inline 可以强制转换。 对于内联函数,不是在调用时才转去执行函数体,而是在编译时对所有调用该函数的地方装入实际的函数代码。节省了调用开销,提高了运行速度。内联函数必须在调用之前进行定义。void main( ) tdate aday, bday(10), cday(2,1

15、2); 静态数据成员静态数据成员 静态成员函数静态成员函数静态成员是在编译时被创建,其空间只有一个,且与对象是否存在无关,可为所有以后创建的该类对象共享。并且空间一直保存到程序结束。若想在同一个类的多个对象之间共享某个数据。可将该类成员声明为static,使之成为静态成员。而一般成员是在对象创建时由构造函数分配空间,属于具体的某个对象,对象不同则成员空间也不同,并在函数结束时由析构函数释放对象空间而随之释放。例如:一个学生类,有一个对应学生总数属性的数据成员count。则对于每一个已有学生对象而言,一旦现有学生人数变化,那么已有学生对象中count所保存的数据就不适用,则要对每个对象逐个修改,

16、显然这是不实际的。而应采用静态成员。成员有数据成员和成员函数之分,静态成员也有静态数据成员和静态成员函数之分。静态数据成员的定义同一般的成员函数的定义相似,由说明部分和定义部分两部分组成:说明部分为:static 数据类型 成员名;定义部分为:数据类型 类名:成员名=初始值;如: class CTest public: static int count; /说明部分在类体内 ; int CTest:count = 0; /定义部分在类体外 留意:必须在定义时进行初始化。;int CTest:count = 0;在public中,可被类外函数引用,若在private中,则只能被成员函数或友元引用

17、运行结果:Operating on a: count = 10Operating on b: count = 20Operating on a: count = 20在同类的成员函数中引用,可省略类名:CTest:count静态成员声明静态成员定义引用静态数据成员引用非静态成员引用静态成员函数class student public: static int number( ) return noofstudents; private: char name 10; static int noofstudents;int student:noofstudents=1;void main( ) st

18、udent s; coutstudent:number( )endl;例如:例如: 友元函数友元函数 友元类友元类友元为外部的独立函数友元为另一个类的成员函数 局部类局部类 嵌套类嵌套类int a;void fun( ) static int s; class A public :void initialize(int i) s=i; ; A m; m. initialize(10); class A public: class B public :/不能引用A中私有成员 private: ; void f( ); /不能引用B中私有成员 private: int a; ;#include using namespace std;class Array_max /声明类 public: /以下3行为成员函数原型声明 void set_value( ); /对数组元素设置值 void max_value( ); /找出数组中的最大元素 void show_value( ); /输出最大值 private: int array10; /整型数组 int max; /max用来存放最大值;用类来实现找出一个整型数组中的元素的最大值用类来实现找出一个整型数组中的元素的最大值void Array_max set_v

温馨提示

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

评论

0/150

提交评论