资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
十章节类与对象一Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望类的概念是面向对象程序设计的核心概念SP设计中以函数为程序的基本模块,OOP设计中以类作为程序的基本模块。C+中通过class把数据以及对这些数据进行处理和运算的函数封装为互相关联的程序模块。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数C+中一个由数据成员和函数成员组成的类就是一种新的数据类型,对象就是类的实体,也就是相对应于新数据类型的变量。C+由于引入了类,类具有继承机制,使得程序设计的可重用性大大提高。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数类的说明格式:class private: ; protected: ; public: ; ;导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例1:class point private: int x,y; protected: void readpoint(int vx,int vy); public: void setpoint(int vx, int vy);类成员包括私有成员、保护成员和公有成员导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数私有成员性质可以是成员变量也可以是成员函数只限于通过本类的成员函数来访问当私有段成员位于类声明中的第一部分时,关键字private可以省略。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数保护成员性质可以是成员变量也可以是成员函数可以在本类内和派生类内引用,不能在类外引用关键字protected在任何情况下均不能省略导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数公有成员性质可以是成员变量也可以是成员函数可在类内引用,也可以在类外(由对象)引用提供了类的外部界面,即通过类的公有成员来访问这个类。关键字public在任何情况下均不能省略导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例2: class point private: float Xcoord,Ycoord; public: void SetX(float x) Xcoord=x; ; void SetY(float y) Ycoord=y; ; float GetX(void) return Xcoord; ;导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数float GetY(void) return Ycoord; ; ;int main() point p1, p2; p1.setX(3.5); p1.setY(4.7); p2.setY(p1.GetX);p2.setX(p1.GetY); return 0; p1.Xcoord=3.5;p1.Ycoord=4.7; (错误)见206页的解释导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数设置成员访问控制的作用通过设置各成员的私有性质和公有性质等,可以进行类成员的访问控制。例如通过将数据成员和函数成员设为私有,可以保证程序运行的安全性。把函数和它所处理的数据封装到一起,使得程序中大量的操作、运算、处理等得到最合理的划分,可以使程序模块的可重用性加强。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数成员函数的声明和实现通常在类定义体中声明成员函数,而在别处实现它。在类中声明成员函数时,它所带的函数参量可以只指出其类型在类之外实现成员函数时,必须在函数名之前缀上类名。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例3:class string private: /可以省略 int length; /length和contents为私有成员 char * contents; public: /公有段开始 int set_contents(char * ); /*在声明成员函数时,可以只指出参数类型*/ int get_length(); char * get_contents();导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数/具体成员函数的定义int string:set_contents(char * conts) int i=0; contents=conts; while (*conts+!=0) i+; length=i; return 1; 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数类与对象类在概念上是一种抽象机制,它抽象了一类对象的存储和操作特性。C+中,可以把具有相同内部存储结构的和相同一组操作的对象看成属于同一类。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数类与对象的关系可以用整型int和整型变量i之间的关系来类比。类和整型int均代表一般的概念,而对象和整型变量i却是代表具体的东西。在指定一个类后,往往把属于这个类的对象称为类的实例。实际上对象和实例表达的是一个意思。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数类的使用使用一个类,实际上是创建一个此类的对象,之后使用它的公有成员来达到对此类对象作用的目的。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例4:class point int x,y; public: void setpoint(int vx,int vy) x=vx;y=vy;void main() point p1; p1.setpoint(10,10); point * p2; p2=new point; p2-setpoint(10,10);导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数 为了使用户定义的数据类型如同一般数据类型一样使用,需要在对象被定义时对对象初始化。构造函数和析构函数就是为此目的而设置的。(1) 构造函数构造函数是类的一个特殊成员函数,它的函数名与类名相同,但不能具有返回类型。当创建一个对象时,系统自动调用构造函数,它完成类对象的初始化。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数构造函数的声明和定义例5: class simplestring char string; int length; public: simplestring; /声明构造函数; simplestring:simplestring() /构造函数对其私有变量赋初值 string=; length=0; 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数定义构造函数应注意的问题构造函数名字必须与类名相同,否则编译程序将把它当作一般的成员函数来处理。构造函数没有返回值,在声明和定义构造函数时是不能说明它的类型的。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数构造函数的功能是对对象进行初始化,因此在构造函数中只能对数据成员做初始化,这些数据成员一般为均为私有成员,在构造函数中一般不做赋初值以外的事情。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数带参数的构造函数前面介绍的构造函数是不带参数的,也就是对对象的初始化是固定的。可以在构造函数中采用参数导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例6:class set int elems100; int size; int card; public: set(int i=16); set:set(int i) size=i; 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数void main (void) set s1(64); set s2(16); set s3(8);定义对象时必须传递参数带缺省参数的构造函数前面介绍的带参数的构造函数在定义对象时必须给带参数的构造函数传递参数,否则构造函数将不被执行。在有些构造函数的使用中,只有特别的情况需要传递参数,一般都使用缺省值。缺省参数并不只用于构造函数,一般的成员函数都可以使用缺省参数。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例6: class point int x,y; public: point(int vx=0,int vy=0) x=vx; y=vy; / ;void main(void) point p1;/全部使用缺省值/*传递一个参数,使用一个缺省参数*/ point p2(10); point p3(10,20);/传递两个参数 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数多构造函数前面所介绍的构造函数都是在一个类中只具有一个,但有时在一个类中可以具有几个构造函数,这些构造函数之间以它们所带参数的个数或类型的不同而区分,实际上就是函数的重载。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例7: class x / public: x();/不带参数的构造函数 x(int);/ x(int,char);/ x(float,char);/ ; void main(void) x a; x b(1); x c(1,c); x d(3.5,d); 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数(2)析构函数析构函数是类的特殊的成员函数,它的名字是前面加了一个符号“”的类名。析构函数没有任何参数,也无任何返回类型。在删除对象自身之前,析构函数被调用来释放动态分配的且由指针对象成员指向的存储。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数例8: class xincludeclass string int length; char * contents; public: string(char * s); string();导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数string:string(char * s) if(s) length=strlen(s); /获取字符串的长度 contents=new charlength+1; /为字符串分配存储 strcpy(contents,s); else length=0; contents=0; 导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数string:string()delete contents;/释放字符串contents所占的存储main() char * p=“this is mine”; string mystring1(p);导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数课堂自习P202. 7.1节栈类的设计。P212. 程序program7-3.cpp。P213. 程序program7-4.cpp。导言10.1C+类的构成10.2 类和对象10.3 构造函数和析构函数作业思考题:2、3、8、9、12、13(书面)练习题:1、2、3、4(上机)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号