第5章类和对象吕凤翥C语言基础教程_第1页
第5章类和对象吕凤翥C语言基础教程_第2页
第5章类和对象吕凤翥C语言基础教程_第3页
第5章类和对象吕凤翥C语言基础教程_第4页
第5章类和对象吕凤翥C语言基础教程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章类和对象(一)5.1类的定义一、什么是类二、类的定义格式class类名 r说明部分public:成员函数或数据成员的说明访问权限(或控制)修饰符private:数据成员或成员函数的说明;访问权限(或控制)修饰符各个成员函数的实现实现部分作用域运算符:类名:必须出现在函数名前。“访问权限修饰符(也称访问控制修饰符)(public、private、protected)”在类体内出 现的先后顺序无关,且允许同一修饰符多次出现。一般是先说明公有成员,再说明私有成员“实现部分”不是必须的,如果所有的成员函数都在类体內定义了,则实现部分可以省 略。当然可以部分成员函数在类体内定义,部分在类体外定义。

2、数据成员的类型川'以是整型、浮点型、字符型、数组、指针、引用和对象。如果类型是 对象,不能是自身类的对象,但可以是自身类的对象的指针或引用。如果定义类m时,其成员是类n的对象,而之前还没定义类n,则需要提前说明类n。不允许在类体内初始化数据成员。函数名的命名规则一一合法的标示符。函数名的命名习惯一一当由多个单词构成时,各单词的首字母大写(或从第二个单词开 始首字母大写),各单词间不加分隔符。可以将类的说明部分或整个定义部分(包含实现部分)放到头文件中,需要的时候便于 引用。日期的例子头文件tdate.h/成员函数的实现在类体外/成员函数的实现都在类体内(内联函数)class tdate

3、/class tdatepublic:tpublic:void setdate( int y, int m, int d );void setdate( int y, int m, int d )bool lsleapyear();void print);year = y;month = m;private:day = d;year, month, day;bbool isleapyearf)void tdate:setdate( int y, int m, int d )return year % 4 =0 && year %year = y;100 !=0 11 year

4、% 400 = 0;month = m;day = d;void print)/bool tdate:lsleapyear()icout « year «« month<<"<< day « endl;return year % 4 = 0 && year % 100 != 0| year % 400 = 0;private:int year, month, day;void tdate:print()/;icout « year <<" << month &l

5、t;<"." <<day « endl;源文件p162.cpp/include <iostream.h>include "tdate.h"#include <iostream.h>include "tdate.h"void main()void main()tdate date;tdate date;date.print);date.setdate( 2015, 3,15 );date.print();/运行结果:/ -858993460.-858993460.-858993460

6、/ press any key to continue/运行结果:/ 2015.3.15/ press any key to continue平面上点的例子 头文件tpoint.h/教材p165的例子/修改了成员函数名及参数名class tpoint public:void setpoint( int x, int y ); int getx() return x; int gety() return y; void move( int dx, int dy );private: int x, y;;void tpoint:setpoint( int x, int y ) this-x = x

7、; this->y = y;void tpoint:move( int dx, int dy ) x += dx; y += dy;源文件p162.cppinclude <iostream.h>#include <iostream.h>/include "tpoint.hn/include "tpoint.h"void main()jvoid main()jtpoint p;itpoint p;cout « "( " « p.getx() « ", " «

8、 p.getyf )p.setpoint( 1, 2 );<<")"<< endl;cout « "(" « p.getx( ) « ", " « p.getyf )«")"<< endl;x/运行结果:/运行结果:/(-858993460, -858993460 )/(1,2>/ press any key to continue/ press any key to continue5.2对象的定义类名对象名表对象名.成员

9、名系统为对象的数据成员分配存储空间。5.3对象的初始化一、构造函数和析构函数 构造函数:是类的成员函数,可以重载,一个类可以定义多个重载的构造函数;称无参的构造函数为“默认的构造函数”;是类的特殊的成员函数(函数名与类名相同,不指定类型);在创建对象时,由系统自动调川,川给定的值对对象进行初始化。析构函数:是类的成员函数,不可以重裁,一个类只能定义一个析构函数,且无参数; 是类的特殊的成员函数(函数名与类名相同且前面加符号,不指定类型): 在创建对象时,由系统自动调用,用來释放对象。以円期类为例:用户没有显示定义“构造函数”与“析构 函数”用户定义了 “构造函数”与“析构函数”class td

10、ateclass tdatepublic:public:void setdate( int y, int m, int d );tdate( int y, int m, int d );bool isleapyearf);tdate();void print();void print();private:private:int year, month, day;int year, month, day;void tdate:setdate( int y, int m, int d )year = y;month = m;day = d;bool tdate:lsleapyear()return

11、 year % 4 = 0 && year % 100 !=0 11 year % 400 = 0;void tdate:print()cout « year << "" << month << "" « day « endl;tdate:tdate( int y, int m, int d )year = y;month = m;day = d;cout « "constructor called." << endl;tdate:

12、广 tdate()cout « "destructor called." << endl;void tdate:print()cout « year <<" « month <<"" << day « endl;系统a动提供默认的构造函数一一在 给创建的对象初始化时,自动型类对象的 数据成员为无意义的值。系统自动提供默认的析构函数一一用 來释放对象,其函数体为空。用户一旦定义了构造函数,系统不再提供 默汄的构造函数。通常由用户定义默认的构造函数,否则无 法创

13、建无参对象。例5.3include <iostream.h>/include "tdate.h"void main()tdate today) 2015, 4, 8 ), tomorrow( 2015, 4, 9 /tdate theday;cout« "today is today.print(); cout« "tomorrow is tomorrow.print();运行结果constructor called.constructor called.today is 2015.4.8 tomorrow is 2015

14、.4.9destructor called. destructor called.二、复制构造函数用一个已存在的对象来创建一个新对象;一一通常,新对象的数据成员的值与已存在的对象的相同,当然,也可以不同;一一如果一个类中没有定义“复制构造函数”,系统自动提供一个默认的复制构造函数。例5.4以平面上的点为例:之前的:添加复制构造函数的:class tpointclass tpointpublic:public:void setpoint( int x, int y );tpointf int x, int y )int getx() return x;int gety() return y;th

15、is->x = x;void move( int dx, int dy );this->y = y;cout« "constructor is called.n"private:int x,y;;tpoint(tpoint & p);void tpoint:setpoint( int x, int y )tpoint(>this->x = x;cout « "destructor is called.n"this->y = y;int getx() return x;void tpoint:mov

16、e( int dx, int dy )/int gety() return y;ix += dx;private:y += dy;int x, y;tpoint:tpoint(tpoint & p)ix = p.x;y = py;cout« "copy一constructor is called.nn;void main()tpoint pl 5, 7 ),p2(p1);cout« pl.getx( )<<"," << pl.getyf) « endl;cout« p2.getx() 

17、1; "," « p2.gety() « endl;运行结果:例子5.5class tpointtpoint f( tpoint q)public:tpoint( int x, int y )cout«nok.n"int x, y;this->x = x;x = q.getxf) + 10;this->y = y;y = q.getyf) + 20;cout « "constructor is called.n"tpoint r( x, y );return r;xtpointftpoint

18、& p);itpointuvoid main)cout« "destructor is called.n"tpoint m( 20, 35 ), p( 0, 0 ), n( m );p = f(n);cout « "p.getxf )=" « p.getx( ) « ",int getx() return x;p.gety( )=" « p.getyf) « endl;int gety() return y;private:int x, y;;tpoint:tpoint(tpoint & p)ix = p.x;y = py;cout« "copy_constructor is called.n"运行结果:constructor is called. constructor is called. copy_constructor is called.copy_construc

温馨提示

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

评论

0/150

提交评论