


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 类与对象类与对象的定义一、实验目的1熟悉类的构成,掌握类的定义方法;2掌握对象的定义及对象成员的访问方法;3初步熟悉类与对象简单应用及编程。二、实验学时课内实验: 2 课时 课外练习: 2 课时三 本实验涉及的新知识 结构与类1. C+的结构C+中的结构是在 C语言结构体的基础上扩展得到的。即在C+的结构体中,除可以定义数据成员外,还可以在定义函数,称为成员函数。C+结构体的成员分为数据成员及成员函数;C+结构的成员(数据成员或成员函数)可以定义为公有成员(public)、私有成员(private)、保护成员(protected),其缺省定义为公有成员。2. C+的类C+提供了一种新的
2、比结构体更为安全的数据类型,即“类”类型。类与结构体最为本质的区 别是,成员的缺省定义为私有成员,体现了数据的封装与隐藏性。 同结构一样,在 C+中,“类”是由用户自定义的一种数据类型;C+的类中包括数据成员及成员函数,即将数据(数据成员)及对数据的操作(成员函数) 封装在一个类中。 类的定义1 .定义格式class 类名 private :私有数据成员或成员函数public :公有数据成员或成员函数protected保护数据成员或成员函数 ;2.说明: 类的定义(或称类的声明)中, private、 protected、 public 可以按任意顺序出现任意次。 成员的访问限制 公有成员(p
3、ublic):所定义的成员是开放的,可在任何地方访问(类内部及程序的其他地 方); 私有成员(private):所定义的成员是隐藏的,只能在类内部访问,不能在程序的其他地方 访问; 保护成员(protected):所定义的成员是半开放的,可在类内部访问,也可在其派生类中访问,但不能在程序的其他部分访问。在类体外可以通过调用类的公有成员使用私有数据成员或保护数据成员,但不能改变其值。 数据成员通常定义为私有成员,以实现数据的隐藏;成员函数通常定义为公有成员,以通 过消息传递访问数据成员;保护成员主要用于继承。3数据成员 定义格式:类型 数据成员名 ; 说明: 在定义类的数据成员时,由于计算机不给
4、数据成员分配内存空间,不能使用auto、 register、extern 等进行说明,也不能赋初值; 数据成员既可为基本数据类型,也可以是复杂数据类型(数组、指针、引用、结构体变量、 类的对象等) 。4成员函数 在面向对象程序设计中,成员函数也称方法,是面向对象程序设计消息传递机制的实现方式。 定义格式 在类中定义:返回类型 函数名 (形参表 ) 函数体 在类外定义: 在类中只给出成员函数的原型,成员函数体在类的外部定义。类体内定义格式:返回类型 (函数名 (形参表 );类体外定义格式:返回类型 类名:函数名(形参表 ) 函数体 说明: 通常,当成员函数代码量较大时,在类外定义成员函数; 在定
5、义成员函数以前一定要加上类名,类名与函数名间一定要用“ :,”以表示与普通函数的区别; 成员函数中,应给出形参,当无形参时,通常应加上 void ; 成员函数的返回值类型,与函数原型中的返回类型必须相同; 成员函数与普通函数一样,可以设置参数的默认值; 在类内部定义的成员函数为内置函数,如果要将类外部定义的成员函数设置为内联函数, 则应在函数定义前加上 inline 。 对象的定义及成员的引用类和对象是面向对象程序设计最重要的两个概念。从程序设计的角度理解,类是将具有相同数 据成员、成员函数的操作对象的概括(或抽象) ,是定义对象的模板;而对象是类的实例化或具体 化,即“类”变量。1对象的定义
6、 格式:类名 对象名表 ; 说明:在定义类时,计算机并不给类分配存储空间,只有定义了对象后,计算机才为对象 分配存储空间。2对象成员的使用 数据成员的使用格式:对象名 .数据成员名(只能是公有数据成员) 。 成员函数的使用格式:对象名 .成员函数名(实参表)对象名 .类名 :成员函数名(实参表) 说明: 私有成员、公有成员不能在类的外部被使用,如果数据成员定义为私有成员、保护成员, 则只能通过公有成员函数使用; 可以定义指向对象的指针用操作符“->”访问对象成员,也可以定义对象的引用,使用方法请参考实验二相关内容。4对象的赋值可以用赋值方式将一个对象赋值给另一个对象,也称为对象的拷贝。
7、格式:对象名 1=对象名 2; 说明: 在使用对象赋值语句时,两个对象必须是相同的类; 对象赋值后,二个对象仍是分离的,当改变某一对象成员的值时,另一对象不会因此而改 变; 对象赋值是一种浅拷贝(即位拷贝,对象有深拷贝将在以后的实验中介绍) 。四、实验内容 验证及认知实验按要求调试下列程序(exp_101.cpp),并回答相关问题。#include <iostream.h>#include <math.h>class complex private:double real;double imag;public:void set_complex(double r,doub
8、le 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 mai n() complex A;A.set_complex(3.0,4.0);cout <<"real of complex A="cout <<A.get_real()<<e ndl;cout <<"imag of c
9、omplex A="cout <<A.get_imag()<<e ndl;cout <<"abs of complex A="cout <<A.get_abs()<<e ndl;问题:程序的输出结果为:real of complex A=3imag of complex A=4abs of complex A=5 成员函数(方法)set_complex(double r,double i)的作用是 初始化对象的实部和虚部;get_real()的作用是 返回对象的实部 ; get_imag()的作用是返回对
10、象的虚部 ;get_abs()的作用是 _ 计算出和返回复数的绝对值。 将 main()函数中的语句行"cout <<A.get_real()<<endl ; ” 改为"cout <<A. real<<endl; ”,重新编译程序,将出现 编译不能通过 其原因是外界不可以对类的私有成员直接访问。知识应用实验1 分析下列程序,写出程序的输出结果,再上机运行程序验证其正确性,如果不正确,请认真分析出错原因。程序 2 (exp_102.cpp)#in clude<iostream.h>你分析的程序输出结果是:x=20 y
11、=30x=20 y=30x=25 y=35程序的实际输出结果是:x=20 y=30x=20 y=30x=25 y=35class point private:float x,y;public:void set_po in t(float a,float b);float read_x(void);float read_y(void);void move(float a,float b);void poin t:set_po in t(float a,float b)x=a ; y=b; float poin t:read_x(void) retur n x;float point:read y
12、(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);cout<<"x="<<p1.read_x();cout<<" y="<<p1.read_y()<<endl;cout<<"x="<<p2.read_x();cout<<" y="<&l
13、t;p2.read_y()<<endl; p2.move(5,5);cout<<"x="<<p1.read_x();cout<<" y="<<p1.read_y()<<endl; 2按要求完善并调试通过下列程序 程序 3 完善"hdate.h”中类的定义:class Date private:int year,month,day;public:/对数据成员赋值/ 返回 year/返回 month/ 返回 day/ 是闰年返回 1,不是闰年返回 0void set_date(
14、int y=2000,int m=1,int d=1) year=y;month=m;day=d; int get_year() return year; int get_month() return month;int get_day() return day;int isleapyear(void);void print_date(void) cout<<year<<'-'<<month<<'-'<<day<<endl;int Date:isleapyear(void)/ 是闰年返回 1
15、,不是闰年返回 0 if(year%4=0&&year%100!=0)|(year%400=0);cout<<"1"<<endl;elsecout<<"0"<<endl; 按注释要求完善下列程序(exp_103.cpp)#include<iostream.h>#include"hdate.h"void main(void) Date da1,da2;int y,m,d;da1.set_date(2004,5,1);dal.pri nt_date();cout&
16、lt;<"year="ci n»y;cout<<" mon th="ci n»m;cout<<"day="ci n> >d;da2.set date(y,m,d); /调用方法 set_date(),用消息 y,m,d 对 da2的数据成员赋值_cout<<year<<"."<<month<<"."<<day<<endl; 调用方法输出将 da2用“ 年 月日”格
17、式输出年月日da2.isleapyear(); 调用方法输出 da2的年是否为闰年程序设计实验说明:请将所设计的程序以给定的文件名存放在自己的文件夹下(后同)。1 .定义一个time类保存在“ htime.h”中,要求:数据成员包含时(hour )、分(mi nute )、秒(seco nd),为私有成员; 能给数据成员提供值的成员函数(默认值为0时0分0秒);能分别取时、分、秒; 能输出时、分、秒(用“:”分隔),并显示上午(am)或下午(pm); 有默认值的构造函数(默认值为 0时0分0秒)。说明:成员函数均定义为公有成员。2.编写一个测试time类的main()函数(存放在 exp_10
18、4.cpp)中。要求: 定义对象、对象指针、对象的引用;用输入的值设置时间;用输出时、分、秒的成员函数显示时间;用取时、分、秒的成员函数以“时 分 秒”的格式显示时间; 分别用对象、对象指针、对象的引用调用成员函数。四、实验收获与创新1. 通过完成本实验,谈谈你对面向对象程序设计的初步认识。2. 自已拟定一个解决实际简单题目,分析并抽象为一个类,然后定义对象测试(类的定义放在头文件中,测试程序用exp_105.cpp保存)四:hretangle.hclass Recta ngleprivate:int height;int width;public:in t getC()return (hei
19、ght+width)*2;int getS()return height*width;Rectangle& operator=(const Rectangle& r) height=r.height; width=r.width; return *this;Rectangle(int a,int b)height=a; width=b;#include<iostream.h>#include< hretangle.h>int main()int a,b;cin>>a>>b;Rectangle rect1(a,b);cout<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论