ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:201.70KB ,
资源ID:12378015      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12378015.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计实验报告.docx

1、面向对象程序设计实验报告面向对象程序设计实验报告实验一 C+基础1.1实验目的1.了解并熟悉开发环境,学会调试程序;2.熟悉C+中简单的标准输入输出函数的使用方法;3.理解const修饰符的作用并学会应用;4.理解内联函数的优缺点并学会其使用场合;5.理解并学会函数重载;6.理解并熟练掌握使用new和delete来分配内存;7.理解并熟练掌握引用的使用方法。1.2实验内容1.2.1程序阅读1.理解下面的程序并运行,然后回答问题。#includeint max_def(int x,int y) return(xy?x:y);int max_def(int x,int y,int z) int t

2、emp=0; return(temp=(xy?x:y)z?temp:z;double max_def(double x,double y) return(xy?x:y);int main() int x1=0; int x2=0; double d1=0.0; double d2=0.0; x1=max_def(5,6); x2=max_def(2,3,4); d1=max_def(2.1,5.6); d2=max_def(12.3,3.4,7.8);- coutx1=x1endl; coutx2=x2endl; coutd1=d1endl; coutd2=d2endl;- return 1;

3、问题一:上述程序的输出结果是什么?答:输出结果为问题二:处调用的是哪个函数?答:处调用的是double max_def(double x,double y)函数问题三:处的输出结果为什么是d2=12,而不是d2=12.3?答:因为调用的int max_def(int x,int y,int z)函数返回值为整型。2.理解下面的程序并运行,然后回答问题。#includeint main() int*p1=new int;- int*p2=new int(0);- char*p3=new char10;- return 1;问题一:、处动态申请内存分别代表什么意思?答:处:定义一个整型指针动态分配

4、一个整型空间将首地址赋给p1;处:定义一个整型指针动态分配一个整型空间,并赋值为0;处:定义一个字符型指针动态分配具有10个数组元素的字符数组空间,将首地址赋给p3。问题二:该程序存在什么不合理的地方? 答:程序结束时没有释放分配的存储空间。3. 理解下面的程序并运行,然后回答问题。#includevoid swap(int a,int b) int temp=a; a=b; b=temp;void swap(int*a,int*b) int temp=*a; *a=*b; *b=temp;int main() int i=5; int j=10; coutBefore swap:i=i,j=

5、jendl; swap(i,j); coutAfter the first swap:i=i,j=jendl; swap(&i,&j); coutAfter the second swap:i=i,j=jendl; return 1;问题一:输出结果是什么?答:问题二:处函数调用不能实现两个数的交换,而可以,原因是什么?答:处调用的函数形参为整型变量,是值传递,形参的改变不影响实参; 处调用的函数形参为指针,是址传递,形参的改变会导致实参的改变。问题三:处调用的是哪个函数?答:调用的函数是void swap(int*a,int*b)。实验二 类和对象类的构建2.1 实验目的1.类的定义;2.类

6、对象的使用;3.类成员变量的定义和使用;4.类成员函数的定义和使用;5.理解类的作用域;6.理解类的声明;7.理解类中成员的访问属性;2.2 实验内容2.2.1程序阅读1. 理解下面的程序并运行,然后回答后面的问题。#includeclass CDatepublic: void Set(int m,int d,int y) month=m; day=d; year=y; int IsLeapYear() return (year%4=0 & year%100!=0)|(year%400=0); void Print() coutmonth/day/yearendl; private: int

7、month; int day; int year;void main() CDate a; a.Set(10,15,2007); a.Print();问题一:以上程序为什么不能通过编译?如何改正?答:因为Set函数被设为私有main函数中无法调用,应在set函数前加public。问题二:类中的成员函数和成员变量分别属于哪种访问权限?答:数据成员为私有,Print为公有;set原为私有,改正后为公有。问题三:处语句的意思是什么?答:将类定义一个对象a。2.理解下面的程序并运行,然后回答问题。. #includeint month;/全局变量int day;int year;void Set(in

8、t m,int d,int y) :month=m; :day=d; :year=y;class CDatepublic: void Set(int m,int d,int y) :Set(m,d,y); void Print() coutmonth/day/yearendl; private: int month; int day; int year;void main() CDate a; a.Set(10,15,2007); a.Print();问题一:处是在给成员变量赋值还是全局变量赋值,如果去掉域作用符:,程序是否还能正确运行?答:全局变量,不能。问题二:处调用的哪个函数,如果去掉域

9、作用符:,程序是否还能正确运行?答:调用全局set函数;不能。问题三:程序的输出结果是?答:实验三 类和对象构造函数与析构函数3.1实验目的1.理解this指针的作用和用法;2.掌握构造函数的定义和作用;3.掌握构造函数的使用;4.掌握拷贝构造函数的定义和使用;5.掌握构造函数的重载;6.掌握析构函数的定义和使用。3.2实验内容3.2.1程序阅读1.理解下面的程序并运行,然后回答问题。#includeclass CPointpublic: void Set(int x,int y); void Print();private: int x; int y;void CPoint:Set(int

10、x,int y) x=x; y=y;void CPoint:Print() coutx=x,y=yendl;void main() CPoint pt; pt.Set(10,20); pt.Print();问题一:以上程序编译能通过吗?如果不能,原因是什么?答:能通过编译。问题二:以上程序的运行结构是否正确,如果不正确,分析为什么,如何改正?答:运行结构不正确,因为Set函数中,x=x,参数x覆盖数据成员,使得数据成员并没有被赋值。2.理解下面的程序并运行,然后回答后面的问题。includeclass CPersonpublic: void Print();private: CPerson()

11、;private: int age; char*name;CPerson:CPerson()void CPerson:Print() coutname=name,age=ageendl;void main() CPerson ps(23,张三); ps.Print();问题一:以上程序存在三个错误,在不改变主函数内容的前提下,试改正该程序。答:第一处错误是:在程序头应添加#include文件,第二处错误是:构造函数没有参数,应添加为(int i,char j),第三处错误是:构造函数没有函数体。改正后的程序为:#include#includeclass CPersonpublic: void

12、Print(); CPerson(int i ,char *j);public: int age; char *name;CPerson:CPerson(int i,char *j) age=i; name=j;void CPerson:Print() coutname=name,age=ageendl;void main() CPerson ps(23,张三); ps.Print();实验四 类和对象对象传递与静态成员4.1 实验目的1. 静态成员(静态数据成员、静态成员函数)的作用与使用时的注意事项2.掌友元(友元函数、友元类)的作用和使用;3. 理解常类型。4.2 实验内容4.2.1 程

13、序阅读1. 理解下面的程序并运行,然后回答后面的问题。#include#includeclass CStudentpublic: CStudent(char*n,int a); CStudent(); static void SetAge(int age);private: char*name; int age; static int nTotalObj;int CStudent:nTotalObj=0;CStudent:CStudent(char*n,int a):age(a) int nLcn=strlen(n); name=new charnLen+1; strcpy(name,n);

14、namenLen=0; nTotalObj+;CStudent:CStudent() deletename; nTotalObj-;void CStudent:SetAge(int age) this-age=age;void main() CStudent stu1(张三,25); CStudent str2(李四,26); coutCStudent:nTotalObj=CStudent:nTotalObjendl;问题一:以上程序编译能通过吗,为什么?答:不能,CStudent:nTotalObj为私有变量,类引不能访问。问题二:成员变量nTotalObj起什么作用,它是如何实现的?答:统

15、计该类所创建对象的个数,通过声明为静态。问题三:如果不改编主函数和类Cstudent中的成员变量的属性,应该如何改正该程序?答:可以将static int nTotalObj声明为公有。2. 理解下面的程序并运行,然后回答后面的问题。#include#includeclass CStudentpublic: CStudent(char*n,int a); CStudent();private: char*name; int age;CStudent:CStudent(char*n,int a):age(a) int nLen=strlen(n); name=new charnLen+1; st

16、rcpy(name,n); namenLen=0;CStudent:CStudent() deletename;class CTeacherpublic: CTeacher(char*tn,int ta); CTeacher(); void SetStuAge(int a);private: char*name; int age; CStudent stu;CTeacher:CTeacher(char*tn,int ta):age(ta) int nLen=strlen(tn); name=new charnLen+1; strcpy(name,tn); namenLen=0;CTeacher

17、:CTeacher() deletename;void CTeacher:SetStuAge(int a) stu.age=a;void main() CStudent stu1(张三,25); CStudent str2(李四,26);问题一:以上程序有两个错误,指出并改正。答:第一处错误是Cstudent age为私有,Cteacher无法访问。第二处错误是Cteacher中Cstudent未初始化。改正:public:int ageCteacher:Cteacher(char*tn,int ta):age(ta),stu(tn,ta)3. 理解下面的程序并运行,然后回答后面的问题。#in

18、cludeclass Dateprivate: const int year; const int month; const int day;public: Date(int y,int m,int d); void showdate();Date:Date(int y,int m,int d) year=y; month=m; day=d;void Date:showdate() coutyear/month/dayendl;void main() const Date obj(2007,10,30); obj.showdate();问题一:以上程序有两个错误,试指出来,并改正之?答:第一处

19、错误是:构造函数应该用成员初始化列表对常数据成员初始化;第二处错误是:没有用常成员函数访问常对象数据成员。改正后的程序为:#includeusing namespace std;class Dateprivate: const int year; const int month; const int day;public: Date(int y,int m,int d); void showdate()const ;Date:Date(int y,int m,int d):year(y),month(m),day(d) void Date:showdate()const coutyear/mo

20、nth/dayendl;void main() Date obj(2007,10,30); obj.showdate();实验五 派生与继承单基派生5.1 实验目的1. 理解继承的概念;2理解共有派生、私有派生和保护派生;3. 理解单基派生类中构造函数和析构函数的执行顺序。5.2 实验内容5.2.1 程序阅读1. 理解下面的程序并运行,然后回答后面的问题。#includeclass CBasepublic: CBase(int a) :a(a) protected: void print() couta=aendl; private: int a;class CDerive:public CB

21、asepublic: void print() CBase:print(); coutb=bendl; private: int b;void main() CDerive d; d.print(); CBase b; b.print();问题一:以上程序有两个错误,试指出来,并改正之。答:类CBase中的成员数据应该为公有访问属性,第二个错误是构造函数有问题。改正后的程序有两种:#includeusing namespace std;class CBase public: CBase(int a):a(a) Void print() couta=aendl; public: int a;cl

22、ass CDerive:public CBasepublic: CDerive(int a,int b):CBase(a),b(b) void print() CBase:print(); coutb=bendl;private: int b;void main() CDerive d(6,4); d.print(); CBase b(5); b.print();#includeusing namespace std;class CBase public: void print() couta=aendl; public: int a;class CDerive:public CBasepub

23、lic: void print() CBase:print(); coutb=bendl; private: int b;void main() CDerive d; d.print(); CBase b; b.print();2. 理解下面的程序并运行,然后回答后面的问题。#includeiostream.hclass CBasepublic: CBase(int a) :a(a) coutbase structureendl; CBase() coutbase destructureendl; void print() couta=aendl; protected: int a;class

24、 CDerive:public CBasepublic: CDerive(int a,int b,int c) :CBase(a),b(b),c(c) coutdervice structureendl; CDerive() coutderive destructureendl; void print() CBase:print(); coutb.a=b.aendl; coutc=cendl; private: CBase b; int c;void main() CDerive d(1,2,3); d.print();问题一:以上程序的输出结果是什么,为什么?答:输出结果是原因是 基类和派生

25、类中构造函数和析构函数的执行顺序。问题二:处语句执行完后,d.b.a的值为多少?答:值为1。实验六 派生与继承多基派生6.1 实验目的1. 理解多基派生的定义;2. 基派生中的构造函数与析构函数的调用顺序;3. 理解多基派生中虚基类的作用。6.2实验内容6.2.1 程序阅读1. 理解下面的程序并运行,然后回答后面的问题。class CBase1public: CBase1(int a) :a(a) coutbase1 structure.endl; CBase1() coutbase1 destructure.endl; void print() couta=aendl; protected: int a;class CBase2public: CBase2(in

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1