实验一类与对象
- 格式:doc
- 大小:24.50 KB
- 文档页数:2
类与对象的实验报告类与对象的实验报告引言:在计算机科学领域,类与对象是面向对象编程(Object-Oriented Programming,简称OOP)的核心概念之一。
类是一种抽象的数据类型,用于描述具有相同属性和行为的对象集合。
对象则是类的实例,具体化了类的属性和行为。
本实验旨在通过编写一个简单的类与对象的程序,深入理解类与对象的概念及其在编程中的应用。
实验过程:1. 定义一个类:在这个实验中,我们以动物为例,定义了一个名为Animal的类。
该类具有以下属性和行为:- 属性:名称、年龄、种类- 行为:吃、睡、叫2. 创建对象:在主程序中,我们创建了两个Animal对象,分别代表一只狗和一只猫。
通过调用构造函数,为对象的属性赋值。
3. 调用对象的方法:我们通过调用对象的方法,模拟了动物的行为。
例如,我们调用了eat()方法,让动物吃东西;调用了sleep()方法,让动物睡觉;调用了make_sound()方法,让动物发出叫声。
4. 修改对象属性:我们还演示了如何修改对象的属性。
通过调用set_age()方法,我们改变了动物的年龄;通过调用set_type()方法,我们改变了动物的种类。
实验结果:通过运行程序,我们观察到以下结果:- 狗的名称是"旺财",年龄是3岁,种类是"狗"。
狗吃骨头,睡觉时打呼噜,发出汪汪的叫声。
- 猫的名称是"咪咪",年龄是2岁,种类是"猫"。
猫吃鱼,睡觉时打呼噜,发出喵喵的叫声。
- 经过修改后,狗的年龄变为5岁,种类变为"藏獒";猫的年龄变为3岁,种类变为"波斯猫"。
讨论与分析:通过这个实验,我们深入理解了类与对象的概念及其在编程中的应用。
类是一种抽象的模板,用于描述具有相似属性和行为的对象集合。
对象是类的实例,具体化了类的属性和行为。
通过定义类和创建对象,我们可以更好地组织和管理程序的代码。
实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。
二、实验内容:1、设计圆类,求两个圆的位置关系;2、设计圆类和直线类,求直线与圆的位置关系;3、设计学生类,求某班学生成绩的最高分、最低分及平均分;4、设计部门类和教师类,其中部门类成员为教师类的子对象;5、设计家庭银行账户类,其中账户资金为静态数据成员,为家庭成员共享;6、设计复数类,友元函数实现复数的加减。
三、实验过程:1、根据实验题目确定需要设计哪些类、各类中包含哪些数据成员和函数成员,设计各成员的访问权限,设计数据成员的数据类型,设计函数成员的函数原型;2、给出类设计的程序实现,特别要注意重载构造函数的实现;3、在主函数中完成题目中的逻辑,一般情况下需要创建相关类的对象,通过对象对成员函数的调用或者通过对象指针对成员函数的调用完成相应的功能。
四、参考程序代码:1、设计圆类,求两个圆的位置关系#include <iostream>#include <math.h>using namespace std;class Circle{private:float a,b,r;public:Circle(float c,float d,float e){a=c;b=d; r=e;}friend void position(Circle &,Circle &);};void position(Circle &c1,Circle &c2){float n,m,p;p=sqrt((c1.a-c2.a)*(c1.a-c2.a)+(c1.b-c2.b)*(c1.b-c2.b)); n=fabs(c1.r-c2.r);m=c1.r+c2.r;if(p>m)cout << "相离";if(p==m)cout << "相切";if(p<m)cout << "相交";}int main(){float a,b,c,d,e,f;cin >> a >> b >> c >> d >> e >> f ;Circle c1(a,b,c),c2(d,e,f);position(c1,c2);return 0;}运行结果:2、设计圆类和直线类,求直线与圆的位置关系#include<iostream>#include<math.h>using namespace std;class Circle//圆类{private:float x,y,r;public:Circle(float a,float b,float c) {x=a;y=b;r=c;}float getx(){return x;}float gety(){return y;}float getr(){return r;}};class Line//直线类{private:float a,b,c;public:Line(float x,float y,float z){a=x;b=y;c=z;}void position(Circle c1){float d=fabs(a*c1.getx()+b*c1.gety()+c)/sqrt(a*a+b*b) ;//圆心到直线的距离if(d<c1.getr())cout << "相交";if((d-c1.getr())<0.000001)cout << "相切";cout << "相离";}};int main(){Line l1(3,3,4);//创建直线对象Circle c1(-23,3,7);//创建圆对象l1.position(c1);return 0;}运行结果:3、设计学生类,求某班学生成绩的最高分、最低分及平均分#include <iostream>#include <string.h>using namespace std;class Student{private:char name[20],xuehao[20];float math;public:Student(){}Student(char *na,char *xu,float ma):math(ma) {strcpy(name,na);strcpy(xuehao,xu);}void set(char *na,char *xu,float ma){math=ma;strcpy(name,na);strcpy(xuehao,xu);}char *get_name(){return name;}char *get_xuehao(){return xuehao;float get_math(){return math;}};void max_min(Student stu[],int n){Student max,min;max=min=stu[0];for(int i;i<n;i++){if(stu[i].get_math()>max.get_math())max=stu[i];if(stu[i].get_math()<min.get_math())min=stu[i];}cout << "学生成绩最高:" << max.get_name() << "," << max.get_xuehao() << "," << max.get_math() << endl;cout << "学生成绩最低:" << min.get_name() << "," << min.get_xuehao() << "," << min.get_math() << endl;}void ave(Student stu[],int n){float sum=0;for(int i=0;i<n;i++){sum=sum+stu[i].get_math();cout << "ave=" << sum/n;}int main(){char na[20],xu[20];float ma;Student stu[20];int n;cout << "请输入学生总人数"; cin >> n;for(int i=0;i<n;i++){cin >> na >> xu >> ma ; stu[i].set(na,xu,ma); }max_min(stu,n);ave(stu,n);return 0;}运行结果:4、设计部门类和教师类,其中部门类成员为教师类的子对象#include <iostream>#include <string.h>using namespace std;class Department{private:int dep_num;char dep_master[20];char dep_name[20];public:Department(){}Department(int num,char *ma,char *na){dep_num=num;strcpy(dep_master,ma);strcpy(dep_name,na);}void show(){cout << dep_num << "," << dep_master << "," << dep_name ; }};class Teacher{private:char name[20];char haoma[20];Department dep;public:Teacher(char *n,char *nu,int num,char *ma,char *na):dep(num,ma,na) {strcpy(name,n);strcpy(haoma,nu);}void show(){dep.show();cout << "," << name << "," << haoma << endl;}};int main(){Teacher hp("wanghai","12345",6,"kiki","computer");hp.show();return 0;}运行结果:5、设计家庭银行账户类,其中账户为静态数据成员,为家庭成员共享#include <iostream>#include <string.h>using namespace std;class Familymember//家庭成员类{private:char membername[10];//成员名public:static float account;//共享账户资金 Familymember(char *name);static void save(float money);//存钱 static void pay(float money);//支出 static void show(); //显示账户余额};float Familymember::account=0;Familymember::Familymember(char *name) {strcpy(membername,name);}void Familymember:: save(float money) {account= account+money;}void Familymember:: pay(float money){account= account-money;}void Familymember:: show(){cout<<account<<endl;}int main()//主函数{ Familymember husband("wang"),wife("Li"); husband.save(10000);wife.pay(3000);wife.save(5000);wife.show();husband. show();}运行结果:6、设计复数类,友元函数实现复数的加减#include <iostream>using namespace std;class Fushu{private:float ss,xs;public:Fushu(){}Fushu(float a,float b){ss=a;xs=b;}friend Fushu jiafa(Fushu &f1,Fushu &f2){return Fushu((f1.ss+f2.ss),(f1.xs+f2.xs)); }friend Fushu jian(Fushu &f1,Fushu &f2){return Fushu((f1.ss-f2.ss),(f1.xs-f2.xs)); }void show(){cout << ss << " + " << xs << "i" << endl; }};int main(){Fushu f1(2,3),f2(4,5);Fushu f3,f4;f3=jiafa(f1,f2);f4=jian(f1,f2);f3.show();f4.show();return 0;}运行结果:。
类与对象实验报告类与对象实验报告引言:类与对象是面向对象编程的基本概念,通过定义类和创建对象,可以实现对数据和行为的封装,使程序更加模块化和可扩展。
本实验旨在通过实际操作,加深对类与对象的理解,并掌握其基本用法。
实验过程:1. 定义类:在实验开始前,我们首先需要定义一个类。
类是对象的抽象描述,包含了对象的属性和方法。
以汽车为例,我们可以定义一个Car类,其中包含品牌、颜色和速度等属性,以及启动、加速和刹车等方法。
2. 创建对象:在定义了Car类之后,我们可以通过创建对象来实例化该类。
通过使用new关键字,我们可以创建多个汽车对象,每个对象都拥有独立的属性和方法。
例如,我们可以创建一个名为myCar的对象,它是Car类的一个实例。
3. 访问对象的属性和方法:创建了对象之后,我们可以通过点运算符来访问对象的属性和方法。
例如,通过myCar.brand可以获取myCar对象的品牌属性,通过myCar.start()可以调用myCar对象的启动方法。
这样,我们可以通过对象来操作和管理数据,使代码更加清晰和可读。
4. 对象之间的交互:在实际编程中,对象之间经常需要进行交互。
通过在类中定义方法,我们可以实现对象之间的数据传递和信息交流。
例如,我们可以定义一个方法来获取其他汽车对象的速度,并根据这些速度进行比较和判断。
实验结果:通过实验,我们深入了解了类与对象的概念和用法。
通过定义类和创建对象,我们可以更好地组织和管理代码,提高程序的可维护性和可扩展性。
通过访问对象的属性和方法,我们可以实现对数据和行为的封装,使代码更加模块化和易于理解。
通过对象之间的交互,我们可以实现数据的共享和协作,提高程序的效率和灵活性。
实验总结:类与对象是面向对象编程的核心概念,掌握了类与对象的基本用法对于开发高质量的程序至关重要。
通过本次实验,我们加深了对类与对象的理解,并通过实际操作掌握了其基本用法。
在以后的编程过程中,我们可以更加灵活地运用类与对象,提高代码的可读性和可维护性。
实验一类和对象实验课程名:面向对象程序设计(C++)专业班级:学号::实验时间:实验地点:指导教师:p->PrintList();cout<<"请输入要删除的元素所在的位置:"<<endl;cin>>n;p->Delete(n);p->PrintList();return 0;}运行结果:2.设计一个带头结点的单链表类,要求:(1)生成一个整数线性表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
(2)设计一个测试主函数,实际运行验证所设计单链表类的正确性。
实验代码:#include<iostream>using namespace std;L3.PrintList( );cout<<"链表的长度为:"<<L1.Length( )<<endl;cout<<"链表的第四个元素为:"<<L1.Get(4)<<endl;cout<<"链表中元素5为第"<<L1.Locate(5)<<"个元素"<<endl;L1.Insert(4, 17);cout<<"插入元素后链表为:";L1.PrintList( );L1.Delete(8);cout<<"删除第8个元素后链表变为:";L1.PrintList( );return 0;}实验结果:3.设计一个不带头结点的单链表类,要求:(1)不带头结点单链表类的成员函数包括取数据元素个数、插入元素、删除所有值为k的元素、取数据元素。
{int a[10]={0,1,2,3,4,5,6,7,8,9};LinkList<int> L(a,10);cout<<"链表长为:"<<L.Length()<<endl;cout<<"链表的第6个元素为:"<<L.Get(6)<<endl;L.Insert(5,17);cout<<"在链表第5个位置插入元素17后链表变为:";L.PrintList();L.Delete(8);cout<<"删除第8个元素后链表变为:";L.PrintList();return 0;}实验结果为:4.设计一个带头结点的循环单链表类,实现约瑟夫环问题;问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。
浙江理工大学信息学院面向对象程序设计实验报告实验名称:类的定义与使用学时安排:3实验类别:设计性实验实验要求:1人1组姓名:邵旸珂学号:2016329621068 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2)掌握类对象的定义;3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别;4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数;二、实验原理介绍通过建立类及对象,用类的成员函数和对象访问类的成员;利用建立类的构造函数,完成类的成员的初始化工作;三、实验设备介绍软件需求: windows或linux下的c++编译器硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容编写一个程序,模拟电梯的功能。
功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。
要求:1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。
2.如果是上行,则选择输入的楼层号不能比当前楼层号小,否则应给出不合法提示。
3. 如果是下行,则选择输入的楼层号不能比当前楼层号大,否则应给出不合法提示。
4.电梯一旦开始运作就会始终运行,直到窗口关闭。
5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层的输出形式能更加醒目。
如果可以,在电梯最初开始运行时,能在电梯由内部显示当前日期(提示:实现这些功能时,需要调用系统api,实现时间显示功能可以使用CDate类)。
五程序清单#include <iostream>#include <ctime>#include <windows.h>using namespace std;int n,floorNumber;class Elevator{private:int floor; //电梯总的楼层数bool up; //是否上行,bool为布尔类型,可取值true或falsebool down; //是否下行int currentFloor; //当前所在楼层public:Elevator(int floor);void setUpButton(); //按下上行按钮void setDownButton(); //按下下行按钮void setFloorNumber(int floorNumber); //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层int getCurrentFloor();//获得当前所在楼层void charge();int choice();};Elevator::Elevator(int f){floor =f;up=false;down=false;currentFloor=1;};void Elevator::setUpButton(){if(currentFloor>floorNumber){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您不能上行!"<<endl<<endl;}else if(floorNumber>floor){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"没这一层!太高啦!您想上天?!"<<endl<<endl;}else up=true;}void Elevator::setDownButton(){if(currentFloor<floorNumber){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您不能下行!"<<endl<<endl;}else if(floorNumber<1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"没这一层!太低啦!您想入地?!"<<endl<<endl;}else down=true;}void Elevator::setFloorNumber(int floorNumber){if(up){for(;currentFloor<floorNumber;currentFloor++){ cout<<"--"<<currentFloor<<"--"<<endl;Sleep(2000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED);cout<<"第"<<currentFloor<<"层到了"<<endl<<endl;up=false;}if(down){for(;currentFloor>floorNumber;currentFloor--){ cout<<"--"<<currentFloor<<"--"<<endl;Sleep(2000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED);cout<<"第"<<currentFloor<<"层到了"<<endl<<endl;down=false;}}int Elevator::getCurrentFloor(){return currentFloor;}int Elevator::choice(){cin>>n;if(n==2&&getCurrentFloor()==1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您已经在第一层了!除非您自己打洞,不然我是不会带你下去的!"<<endl<<endl;return 0;}switch(n){case 1:cout<<"请输入要进入的楼层"<<endl;cin>>floorNumber;setUpButton();setFloorNumber(floorNumber); break;case 2:cout<<"请输入要进入的楼层"<<endl;cin>>floorNumber;setDownButton();setFloorNumber(floorNumber); break;case 3:return -1;default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"只能选上升和下降!您难道还想玩电梯漂移?!"<<endl<<endl; break;}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<"当前电梯停在"<<getCurrentFloor()<<"层"<<endl;}void Elevator::charge(){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<"---请选择操作---"<<endl;cout<<"| 1.上升 |"<<endl;cout<<"| 2.下降 |"<<endl;cout<<"| 3.退出 |"<<endl;cout<<"|--------------|"<<endl;}int main(){long a;time(&a);int floor;cout<<"告诉我总共有几层"<<endl;cin>>floor;Elevator el(floor);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<ctime(&a)<<endl;cout<<"本电梯共"<<floor<<"层,欢迎您的使用"<<endl<<endl;while(1){int i=0;el.charge();i=el.choice();if(i==-1) break;}return 0;}六运行结果七实验心得实验很有趣,让我初步体会了程序猿的感受。
类和对象实验报告类和对象实验报告引言:在计算机科学领域中,类和对象是面向对象编程的基本概念。
通过类和对象的使用,可以将现实世界中的事物抽象为计算机程序中的实体,从而更好地描述和处理问题。
本实验将通过一个简单的示例来介绍类和对象的基本概念,并展示它们在实际编程中的应用。
实验目的:1. 理解类和对象的概念;2. 学会创建类和对象,并进行基本的操作;3. 掌握类和对象在程序中的应用。
实验过程:1. 定义一个类:首先,我们需要定义一个类来表示一个学生。
一个学生通常有姓名、年龄和成绩等属性。
我们可以使用Python语言来定义这个类,如下所示:```pythonclass Student:def __init__(self, name, age, score): = nameself.age = ageself.score = score```在上述代码中,我们使用了Python中的类和构造函数的概念。
`__init__`方法是类的构造函数,用于初始化类的属性。
`self`表示类的实例对象本身。
2. 创建对象:在类定义完成后,我们可以创建类的对象。
通过创建对象,我们可以访问和操作类的属性和方法。
下面是创建一个学生对象的示例代码:```pythonstudent1 = Student("张三", 18, 90)```在上述代码中,我们使用`Student`类的构造函数创建了一个名为`student1`的学生对象。
通过传入相应的参数,我们可以为学生对象的属性赋值。
3. 访问对象的属性和方法:一旦对象创建成功,我们就可以通过对象来访问和操作类的属性和方法。
下面是一些访问对象属性和方法的示例代码:```pythonprint() # 输出学生的姓名print(student1.age) # 输出学生的年龄print(student1.score) # 输出学生的成绩def study(self):print(f"{}正在学习")student1.study() # 调用学生对象的study方法```在上述代码中,我们通过对象的名称和点操作符来访问对象的属性和方法。
[实验报告]类和对象
一、实验目的
通过本次实验,了解抽象的一种程序设计概念“类”和“对象”,理解类之间的继承与多态性,以及封装对对象的各种属性和行为,实现软件对象模型与真实世界对象间的映射。
二、实验内容
1.定义类与对象
(1)类是代表一类实体的抽象。
它包含了一个共同拥有的结构和行为。
类是面向对象程序设计的基本元素。
(2)对象是一个实例。
它拥有一个特定于其类型的属性,并表现出对应的行为。
对象是程序中实际的可操作的元素。
2.类的成员
(1)类的成员可以是变量,函数,常量等等。
(2)变量:类的成员变量可以存储数据成员和提供给类的方法,这些变量被称为实例变量;类变量存储类及其对象的信息。
(3)函数:类的成员函数用于封装一定的行为或对对象的设置,它可以访问实例变量和类变量的值,以及实现一定的功能。
多态性是指一个类可以根据不同环境要求而采用不同的行为。
接口就是把数据和逻辑封装在一起的内部接口。
实验:类和对象System.out.println();}}}程序运行结果截图如下:2、用直接选择排序方法给一维数组{63,4,24,1,3,15}进行排序。
排序过程如下图所示:具体程序代码如下:package test;public class SelectSort {public static void main(String[] args){int array[]={63,4,24,1,3,15};SelectSort sorter=new SelectSort();sorter.sort(array);}public void sort(int[]array){int index;for(int i=1;i<array.length;i++){index=0;for(int j=1;j<=array.length-i;j++){if(array[j]>array[index]){index=j;}}int temp=array[array.length-i];array[array.length-i]=array[index];array[index]=temp;}showArray(array);}public void showArray(int[]array){System.out.println("选择排序的结果是:");for(int i:array){System.out.print(i+"\t");}System.out.println();}}程序运行结果截图如下:3、请编译下面程序段,如果出错,请写出出错原因,并修改程序使它正常运行。
public class Test4 {int x = 50;static int y =200 ;public static void method( ) {System.out.println(x+y);}public static void main(String[ ] args) {Test4.method( );}}具体程序代码如下:public class Test4 {static int x = 50;static int y =200 ;public static void method( ) {System.out.println(x+y);}public static void main(String[ ] args) {Test4.method( );}}程序运行结果截图如下:4、定义一个Father和Child类,并进行测试。
一、实验目的掌握类和对象的定义,以及它们之间的关系学习类中属性和方法的设计会用UML图来对类进行描述熟悉修饰符的作用,会用set/get方法对数据进行封装二、实验要求设计一个名为Rectangle的类表示矩形。
这个类包括:∙两个名为width和height的私有double型数据域。
用来表示宽、高。
默认值为1.0。
∙创建默认矩形的无参构造方法。
∙一个创建width和height为指定值的矩形的构造方法。
∙一个名为GetArea()的公有方法返回矩形面积double∙一个静态的Compare方法,比较两个矩形的面积大小是否相等并返回一个布尔型结果,相等返回true,不等返回false;画出UML 类图,实现Rectangle类,编写测试程序创建两个Rectangle类的对象。
第一个对象的width为1,height为1;第一个对象的width为5,height为6。
调用compare方法判断两个矩形是否相等并显示结果。
三、实验内容1.使用Jude工具绘制UML图2.编写代码实现类Rectanglepackage edu.neu.li.test;publicclass Rectangle {privatedouble width;privatedouble height;public Rectangle() {this.width = 1.0;this.height = 1.0;public Rectangle(double width, double height) {this.width = width;this.height = width;}publicdouble GetArea() {returnthis.width * this.height ;}publicstaticboolean Compare(Rectangle rec1, Rectangle rec2) { if(rec1.GetArea()==rec2.GetArea()){returntrue;}returnfalse;}}3.编写测试程序完成功能。
1.1实验目的1.掌握类的定义方法,能合理指定类中成员的访问权限2.学习对象的说明和使用方法3.正确理解类与结构体的异同4.理解this指针的用途1.2实验内容与步骤类是对同一类事物的抽象描述,其数据成员用于描述该类事物的属性,成员函数完成修改、获取属性值或实现基于属性的某些操作。
类不占用存储空间。
对象是类的实例,对象占用存储空间。
C++中类与结构体并没有本质的区别,结构体中也可以定义成员函数,也可以指定各个成员的访问权限。
两者的唯一差异在于:结构中成员的缺省访问权限是公有的,而类中成员的缺省访问权限是私有的。
1.上机实验题一定义一个描述学生通讯录的类,数据成员包括:姓名、学校、电话号码和邮编;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值。
⑴分析由于姓名、学校和电话号码的数据长度是可变的,可使用动态的数据结构。
邮编的长度是固定的,可定义一个字符数组来存放邮编。
将数据成员均定义为私有的。
用一个成员函数输出所有的成员数据,用四个成员函数分别设置姓名、单位、电话号码和邮编,再用四个成员函数分别获取姓名、单位、电话号码和邮编。
主函数完成简单的测试工作。
一个完整的参考程序如下:#include <iostream.h>#include <string.h>class COMMU{char *pName; //姓名,数据成员为私有的char *pSchool; //单位char *pNum; //电话号码char Box[10]; //邮编public:void Print(void) //输出数据成员Array{cout<<"姓名:"<<pName<<'\t';cout<<"单位:"<<pSchool<<'\t';cout<<"电话号码:"<<pNum<<'\t';cout<<"邮编:"<<Box<<'\n';}void Init(char *,char *,char *,char *);void FreeSpace(void); //释放数据成员占用的空间void SetName(char *name){if(pName ) delete [ ] pName; //释放存储空间pName = new char[strlen(name)+1]; //申请存储空间strcpy(pName,name);}void SetScool(char *unit) //置学校名称{if( pSchool ) delete [] pSchool;pSchool = new char[strlen(unit)+1];strcpy(pSchool,unit);}void SetNum(char *num) //置电话号码{if( pNum ) delete [ ] pNum;pNum = new char[strlen(num)+1];strcpy(pNum,num);}void SetBox(char *mailnum) //置邮编{strcpy(Box,mailnum);}char *GetName(void) //取姓名{ return pName; }char *GetScool(void ) //取学校{ return pSchool; }char *GetNum(void) //取电话号码{ return pNum; }char *GetBox(void) //取邮编{ return Box; }};void COMMU::Init(char *name,char *unit,char *num,char *b){ //完成初始化pName = new char [strlen(name)+1];strcpy(pName,name);pSchool = new char [strlen(unit)+1];strcpy(pSchool,unit);pNum = new char [strlen(num)+1];strcpy(pNum,num);strcpy(Box,b);}void COMMU::FreeSpace(void){if(pName) delete [] pName;if(pSchool) delete [] pSchool;if(pNum) delete [] pNum;}void main(void ){COMMU c1,c2;c1.Init("张建国","南京大学","025-********","210024");c2.Init("李国强","南京工业大学","025-********","210015");c1.Print();c2.Print();c1.SetName("王国安");cout<<c1.GetName()<<'\n';c1.SetScool("南京理工大学");cout<<c1.GetScool()<<'\n';c1.SetNum("025-********");cout<<c1.GetNum()<<"\n";c1.SetBox("210090");cout<<c1.GetBox()<<"\n";c1.Print();c1.FreeSpace();c2.FreeSpace();}⑵上机要求用以下数据测试程序的正确性:对象的初始化数据为:Array李文明清华大学010—23234567 0123344名字改为―李明明‖,并输出;学校改为―北京理工大学‖并输出;电话改为―010—55667878‖,并输出;邮编改为―150035‖并输出。
实验一类与对象
一、实验目的与要求
(1)掌握类和对象的概念、定义和使用方法。
(2)掌握不同特性对象成员的访问方法,以及this指针的概念和使用方法。
(3)掌握构造函数和析构函数的使用方法。
(4)掌握友员的使用方法。
学会使用VC++ 6.0或新版的Debug的功能跟踪构造函数、析构函数的执行顺序。
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统或新版。
三、实验内容及步骤
(1) 定义一个score类,其中包括私有数据成员和公有成员函数,即
num 学号
Math 高等数学成绩
English 英语成绩
Programming 程序设计成绩
inscore() 输入学号和各科成绩,并且计算平均成绩
showscore(时) 输出学号和各科成绩
使用score类,输入某班n(事先不能确定)个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。
(2)写出下列程序的执行结果,然后上机进行验证。
用VC++ 6.0或新版的Debug的功能跟踪构造函数、析构函数和成员函数的执行顺序。
#include <iostream>
using namespace std;
class TEST
{public:
TEST() { cout<< "调用构造函数" << endl;
x = 2; y = 50; z = 9; }
TEST( int a,int b,int c )
{
cout << "调用重载构造函数"<< endl;
x = a; y = b; z = c;
}
void display()
{
cout << "x=" << x << '\t' << "y=" << y <<'\t' << "z=" << z << endl;
}
int max( int a,int b )
{
if ( a>b ) return a; else return b;
}
~TEST( )
{
cout << "调用析构函数" << endl;
cout << x << "," << y <<"和" << z << "最大值是:" << max( max( x,y ),z) << endl;
}
private:
int x,y,z;
};
void main()
{
TEST obj1;
obj1.display ( ) ;
TEST obj2( 33, 20, 80);
obj2.display();
}
(3)建立一个复数类imaginary,其私有数据成员x和y表示复数的实部和虚部,构造函数imaginary用于对复数的实部和虚部初始化,友员函数add,sub,mul和div分别用于进行复数的加、减、乘和除法运算,静态函数show用于显示运算结果。
在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后输出运算结果。
实验指导
(1)对本实验第(1)题,由于事先不知道学生的人数,所以在程序中可以使用动态对象数组来描述每个学生的数据和对学生的数据进行的操作。
(2)为跟踪本实验第(2)题程序中的构造函数、析构函数和成员函数的执行,先在Visual C++主窗口中打开源程序文件,并对该程序文件进行编译。
然后使用VC++ 6.0 Debug的F11和F10功能键分步执行并跟踪程序。
注意观察构造函数的执行时机。
(3)假设有两个复数a+bi和c+di,则复数的加、减、乘和除法运算规定如下
(a+bi)+(c-K/i)=(a+c)+(b+d)i
(a+bi)-(c+di)=(a-c)+(b-d)i
(a+bi)*(c+di)=(ac-bd)+(bc+ad)i
(a+bi)/(c+di)=(ac+bd)/(c2+d2)+(bc-ad)/ (c2+d2)i。