实验一 类与对象.doc_第1页
实验一 类与对象.doc_第2页
实验一 类与对象.doc_第3页
实验一 类与对象.doc_第4页
实验一 类与对象.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验一 类与对象类与对象的定义一、实验目的1熟悉类的构成,掌握类的定义方法;2掌握对象的定义及对象成员的访问方法;3初步熟悉类与对象简单应用及编程。二、实验学时课内实验:2课时 课外练习:2课时三 本实验涉及的新知识 结构与类1C+的结构C+中的结构是在C语言结构体的基础上扩展得到的。即在C+的结构体中,除可以定义数据成员外,还可以在定义函数,称为成员函数。 C+结构体的成员分为数据成员及成员函数; C+结构的成员(数据成员或成员函数)可以定义为公有成员(public)、私有成员(private)、保护成员(protected),其缺省定义为公有成员。2C+的类C+提供了一种新的比结构体更为安全的数据类型,即“类”类型。类与结构体最为本质的区别是,成员的缺省定义为私有成员,体现了数据的封装与隐藏性。 同结构一样,在C+中,“类”是由用户自定义的一种数据类型; C+的类中包括数据成员及成员函数,即将数据(数据成员)及对数据的操作(成员函数)封装在一个类中。 类的定义class 类名 private : 私有数据成员或成员函数 public : 公有数据成员或成员函数 protected 保护数据成员或成员函数 ;1定义格式2说明: 类的定义(或称类的声明)中,private、protected、public可以按任意顺序出现任意次。 成员的访问限制 公有成员(public):所定义的成员是开放的,可在任何地方访问(类内部及程序的其他地方); 私有成员(private):所定义的成员是隐藏的,只能在类内部访问,不能在程序的其他地方访问; 保护成员(protected):所定义的成员是半开放的,可在类内部访问,也可在其派生类中访问,但不能在程序的其他部分访问。在类体外可以通过调用类的公有成员使用私有数据成员或保护数据成员,但不能改变其值。 数据成员通常定义为私有成员,以实现数据的隐藏;成员函数通常定义为公有成员,以通过消息传递访问数据成员;保护成员主要用于继承。3数据成员 定义格式:类型 数据成员名; 说明: 在定义类的数据成员时,由于计算机不给数据成员分配内存空间,不能使用auto、register、extern等进行说明,也不能赋初值; 数据成员既可为基本数据类型,也可以是复杂数据类型(数组、指针、引用、结构体变量、类的对象等)。4成员函数在面向对象程序设计中,成员函数也称方法,是面向对象程序设计消息传递机制的实现方式。 定义格式 在类中定义: 返回类型 函数名(形参表) 函数体 在类外定义:在类中只给出成员函数的原型,成员函数体在类的外部定义。类体内定义格式:返回类型 (函数名(形参表);类体外定义格式: 返回类型 类名:函数名(形参表) 函数体 说明: 通常,当成员函数代码量较大时,在类外定义成员函数; 在定义成员函数以前一定要加上类名,类名与函数名间一定要用“:”,以表示与普通函数的区别; 成员函数中,应给出形参,当无形参时,通常应加上void; 成员函数的返回值类型,与函数原型中的返回类型必须相同; 成员函数与普通函数一样,可以设置参数的默认值; 在类内部定义的成员函数为内置函数,如果要将类外部定义的成员函数设置为内联函数,则应在函数定义前加上inline。 对象的定义及成员的引用类和对象是面向对象程序设计最重要的两个概念。从程序设计的角度理解,类是将具有相同数据成员、成员函数的操作对象的概括(或抽象),是定义对象的模板;而对象是类的实例化或具体化,即“类”变量。1对象的定义 格式:类名 对象名表; 说明:在定义类时,计算机并不给类分配存储空间,只有定义了对象后,计算机才为对象分配存储空间。2对象成员的使用 数据成员的使用格式:对象名.数据成员名(只能是公有数据成员)。 成员函数的使用格式:对象名.成员函数名(实参表)对象名.类名:成员函数名(实参表) 说明: 私有成员、公有成员不能在类的外部被使用,如果数据成员定义为私有成员、保护成员,则只能通过公有成员函数使用; 可以定义指向对象的指针用操作符“-”访问对象成员,也可以定义对象的引用,使用方法请参考实验二相关内容。4对象的赋值可以用赋值方式将一个对象赋值给另一个对象,也称为对象的拷贝。 格式:对象名1=对象名2; 说明: 在使用对象赋值语句时,两个对象必须是相同的类; 对象赋值后,二个对象仍是分离的,当改变某一对象成员的值时,另一对象不会因此而改变; 对象赋值是一种浅拷贝(即位拷贝,对象有深拷贝将在以后的实验中介绍)。四、实验内容 验证及认知实验按要求调试下列程序(exp_101.cpp),并回答相关问题。#include #include class complex private: double real; double imag; public: void set_complex(double r,double i) real=r;imag=i; double get_real( )return real; double get_imag( )return imag; double get_abs( ) double t; t=sqrt(real*real+imag*imag); return t;void main() complex A; A.set_complex(3.0,4.0); cout real of complex A=; cout A.get_real()endl; cout imag of complex A=; cout A.get_imag()endl; cout abs of complex A= ; cout A.get_abs()endl;问题: 程序的输出结果为:real of complex A=3imag of complex A=4abs of complex A=5 1 成员函数(方法)set_complex(double r,double i)的作用是初始化对象的实部和虚部 ; get_real( ) 的作用是 返回对象的实部 ;get_imag( ) 的作用是 返回对象的虚部 ;get_abs( ) 的作用是 计算出和返回复数的绝对值 。2 将main()函数中的语句行“ cout A.get_real()endl ;”改为“cout A. realendl;”,重新编译程序,将出现 编译不能通过 其原因是 外界不可以对类的私有成员直接访问 。 知识应用实验1分析下列程序,写出程序的输出结果,再上机运行程序验证其正确性,如果不正确,请认真分析出错原因。程序2(exp_102.cpp)#include你分析的程序输出结果是:x=20 y=30x=20 y=30x=25 y=35class point private: float x,y; public:void set_point(float a,float b);float read_x(void);float read_y(void);void move(float a,float b);程序的实际输出结果是:x=20 y=30x=20 y=30x=25 y=35;void point:set_point(float a,float b) x=a ; y=b; float point:read_x(void) return x;float point:read_y(void) return y;void point:move (float a,float b) x+=a;y+=b;void main(void) point p1,&p2=p1; p1.set_point(20,30); coutx=p1.read_x(); cout y=p1.read_y()endl; coutx=p2.read_x(); cout y=p2.read_y()endl; p2.move(5,5); coutx=p1.read_x(); cout y=p1.read_y()endl;2按要求完善并调试通过下列程序程序3 完善“hdate.h”中类的定义: class Date private: int year,month,day; public:void set_date(int y=2000,int m=1,int d=1) /对数据成员赋值year=y;month=m;day=d;int get_year() /返回yearreturn year; int get_month() /返回monthreturn month;int get_day() /返回dayreturn day;int isleapyear(void); /是闰年返回1,不是闰年返回0void print_date(void)coutyear-month-dayendl;int Date:isleapyear(void) /是闰年返回1,不是闰年返回0 if(year%4=0&year%100!=0)|(year%400=0); cout1endl; else cout0endl; 按注释要求完善下列程序(exp_103.cpp)#include#includehdate.hvoid main(void) Date da1,da2; int y,m,d; da1.set_date(2004,5,1); da1.print_date(); couty; coutm; coutd; da2.set_date(y,m,d); /调用方法set_date(),用消息y,m,d对da2的数据成员赋值 coutyear.month.dayendl; /调用方法输出将da2用“ 年 月 日”格式输出年月日 da2.isleapyear(); /调用方法输出da2的年是否为闰年 程序设计实验说明:请将所设计的程序以给定的文件名存放在自己的文件夹下(后同)。1定义一个time类保存在“htime.h”中,要求: 数据成员包含时(hour)、分(minute)、秒(second),为私有成员; 能给数据成员提供值的成员函数(默认值为0时0分0秒); 能分别取时、分、秒; 能输出时、分、秒(用“:”分隔),并显示上午(am)或下午(pm); 有默认值的构造函数(默认值为0时0分0秒)。说明:成员函数均定义为公有成员。2编写一个测试time类的main()函数(存放在exp_104.cpp)中。要求: 定义对象、对象指针、对象的引用; 用输入的值设置时间; 用输出时、分、秒的成员函数显示时间; 用取时、分、秒的成员函数以“ 时 分 秒”的格式显示时间; 分别用对象、对象指针、对象的引用调用成员函数。三:四、实验收获与创新1通过完成本实验,谈谈你对面向对象程序设计的初步认识。2自已拟定一个解决实际简单题目,分析并抽象为一个类,然后定义对象测试(类的定义放在头文件中,测试程序用exp_105.cpp保存)四:hretangle.h class Rectangleprivate:int height;int width;public:int getC()return (height+width)*2;int getS()return height*width;Rectangle& operator=(const Rectangle& r)height=r.height;width=r.wid

温馨提示

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

评论

0/150

提交评论