八面向对象程序设计.docx
- 文档编号:29853348
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:25
- 大小:116.99KB
八面向对象程序设计.docx
《八面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《八面向对象程序设计.docx(25页珍藏版)》请在冰豆网上搜索。
八面向对象程序设计
八《面向对象程序设计》
大纲说明:
实验1、2为基本的验证设计实验,要求验证C++的新特性以及简单类的编写和应用
实验3为重点内容,主要锻炼学生对继承与多态性的掌握,并能灵活运用于简单的实际应用问题的解决。
实验4为综合应用实验,主要锻炼学生运用所学C++知识,结合某一特定C++语言工具(如VC++)实现一个实用的窗口应用程序。
实验4的内容一般由教师指定范围,学生自由选择一题,由学生独立或小组合作完成。
实验一实现一个简单的C++交互程序
一、所需主要仪器及环境:
每人微机一台,安装VC++
二、实验目的和要求:
学会使用VC完成C++语言源程序的编辑、编译、运行,熟悉程序结构及非面向对象的新特性。
三、实验主要内容:
运行并初步了解VC++环境;创建一个简单的Win32ConsoleApplication;编写简单程序;编译并调试运行程序。
四、参考实验步骤:
①运行VC++,并在新建菜单中选择创建一个空的Win32ConsoleApplication类型的工程
②引入头iostream.h文件,编写main函数,在其中实现:
定义一个整型变量i;通过键盘给变量i赋值;显示变量i的值;
③以.cpp为扩展名为存盘;
④编译、运行。
参考实例:
#include
voidmain()
{
inti;
cout<<”欢迎来到C++的天地,请你输入一个整型值:
”;
cin>>i;
cout<<”i=”<
……//根据需要学生自行测试所学内容,可测试教材中的有关例子!
}
实验二实现一个简单的类应用
一、所需主要仪器及环境:
每人微机一台,安装VC++
二、实验目的和要求:
掌握类的编写和使用,熟悉类成员的访问权限。
要求能够编写一个完整的类,其中有一定的成员变量和方法(至少一个构造方法),并通过对象创建来测试类的功能。
三、实验主要内容:
编写一个矩形类,完成矩形面积、周长的计算或者编写一个计算器类,实现加、减、乘、除等基本运算,要求将计算结果存放在成员变量中。
四、参考实验步骤:
1确定类结构——
如果是编写矩形类,则类中至少应包括存放矩形长、宽及矩形面积和周长的属性变量;还有构造方法、分别计算矩形面积和周长的方法。
如果编写计算器类,则类中至少应包括存放左右操作数和计算结果的属性变量;还有构造方法、分别计算加、减、乘、除的方法。
2编程实现上述类结构
3编写主函数,并在主函数中创建上述类的一个对象,通过该对象测试上述类的功能
4以.cpp为扩展名为存盘;
5编译、运行。
参考实例:
矩形类实例
#include
classCRectangle{
private:
floatx,y,area,circum;//定义成员变量存储矩形的长、宽和面积、周长
public:
CRectangle(){x=0;y=0;}//定义缺省构造函数
CRectangle(floatxi,floatyi){x=xi;y=yi;}//定义初始化构造函数
voidcal_area(){area=x*y;}//计算面积,结果存放在area成员变量
voidcal_circum(){circum=2*(x+y);}//计算周长,结果存放在circum成员变量
floatgetarea()const{returnarea;}//返回矩形面积
floatgetcircum()const{returncircum;}//返回矩形周长
};
voidmain()
{
floatx,y;
cout<<"pleaseinputthelengthx:
";//分别输入矩形的长和宽
cin>>x;
cout<<"thewidthy:
";
cin>>y;
CRectanglemyrec(x,y);//创建矩形类的一个对象,并用上述输入进行初始化
myrec.cal_area();//调用计算矩形面积的方法
myrec.cal_circum();//调用计算矩形周长的方法
cout<<"theareaoftherectangleis"< <<"andthecircumstanceis"< } 计算器类实例 #include classCalculator{ private: floatx,y,result; public: Calculator(){x=0;y=0;}//定义缺省构造函数 Calculator(floatxi,floatyi){x=xi;y=yi;}//定义初始化构造函数 voidadd(){result=x+y;}//实现两个操作数相加 voidminus(){result=x-y;}//实现两个操作数相减 voidmultiple(){result=x*y;}//实现两个操作数相乘 voiddivide(){if(y==0)cout<<"error: dividebyzero! ! "; elseresult=x/y;}//实现两个操作数相除 floatgetresult()const{returnresult;} }; voidmain() { floatx,y; cout<<"pleasetheleftoperatorx: "; cin>>x; cout<<"therightoperatory: "; cin>>y; Calculatormycal(x,y);//创建计算器类的一个对象,并用上述输入进行初始化 mycal.add(); cout<<"theresultofx+yis"< mycal.minus(); cout<<"theresultofx-yis"< mycal.multiple(); cout<<"theresultofx*yis"< mycal.divide(); cout<<"theresultofx/yis"< } 实验三一个简单的学校教职工信息管理系统的设计 一、所需主要仪器及环境: 每人微机一台,安装VC++ 二、实验目的和要求: 在继续熟悉已有类的编写和使用的基础上,加深对类的继承性和多态性的理解和运用。 要求学生要正确的设计类层次结构,并正确地使用类的继承机制,同时能灵活运用多态性。 三、实验主要内容: 使用继承机制编写一个学校教职工信息管理的应用,完成简单的查询、增删和修改等操作。 本实验只要求实现使用面向对象的方式实现简单的信息管理的模拟,不要求将数据永久保存。 四、参考实验步骤: 1分析问题,归纳对象,从而确定类层次结构。 2结合前述类的编写方法,并使用C++继承机制实现上述类层次结构 3编写主函数,并在主函数中编程实现多个对象的增加、查询测试上述类的功能 4以.cpp为扩展名为存盘。 注意: 如果将各个类分别编程实现,则注意将他们所处的头文件加入相应的.cpp文件中。 5编译并调试程序。 参考实例: 如: 假设学校的教职工简单分为教师、行政人员和后勤人员。 将这几类人概括成“类”,他们所具有的属性和方法分别如下: 教师类 {属性: 职工号,姓名,性别,出生日,工作日,职称,工资级别,工资,二级学院等等; 方法: 新增教师,删除教师,教师信息修改等 } 行政人员类 {属性: 职工号,姓名,性别,出生日,工作日,职务,部门,工资级别,工资等等; 方法: 新增人员,删除人员,行政人员信息修改等 } 后勤人员类 {属性: 职工号,工资,姓名,性别,出生日,工作日,部门,工种等等; 方法: 新增人员,删除人员,后勤人员信息修改等 } 经观察发现,其中职工号,姓名,性别,出生日,工作日和工资属性,以及新增、删除和修改等方法是三个具有的共同特征,于是将他们归纳出来构成学校职工类 学校职工类 {属性: 职工号,姓名,性别,出生日,工作日,工资 方法: 新增人员,删除人员,人员信息修改 } 于是我们可以得到该应用的类层次结构, 为方便传值,我们将这4个类的属性先封装成结构体(struct)类型,再作为一个结构变量(也是一种对象)定义成相应类的成员变量。 这几种结构体类型如下: structemp{ intno; charname[20]; intsex; charbirthdate[20]; charjoinwork_date[20]; floatsalary; }; structemp_teacher{ empbasicinfo; intexpert_level; intsal_level; charschool[50]; }; structemp_official{ empbasicinfo; intsal_level; charposition[50]; chardept[50]; }; structemp_staff{ empbasicinfo; charjobtype[50]; chardept[50]; }; 为便于动态增删结点,我们采用链表形式组织人员信息,同时构造4个链表类来存放各类人员信息。 用C++语言的继承机制编写如下代码: classCSchoolEmp{ public: intsex; charbirthdate[20]; charjoinwork_date[20]; floatsalary; intno; charname[20]; CSchoolEmp*next; CSchoolEmp(){no=0;sex=0;salary=0;next=NULL;} CSchoolEmp(emp&info) { no=info.no; strcpy(name,info.name); sex=info.sex; strcpy(birthdate,info.birthdate); strcpy(joinwork_date,info.joinwork_date); salary=info.salary; next=NULL; } }; classCTeacher: publicCSchoolEmp{ private: public: intexpert_level; intsal_level; charschool[50]; CTeacher*next; CTeacher(){expert_level=0;sal_level=0;next=NULL;} CTeacher(emp_teacherinfo): CSchoolEmp(info.basicinfo) { expert_level=info.expert_level; sal_level=info.sal_level; strcpy(school,info.school); next=NULL; } }; classCOfficial: publicCSchoolEmp{ private: intsal_level; charposition[50]; chardept[50]; public: COfficial*next; COfficial(){sal_level=0;next=NULL;} COfficial(emp_officialinfo): CSchoolEmp(info.basicinfo) { sal_level=info.sal_level; strcpy(position,info.position); strcpy(dept,info.dept); next=NULL; } }; classCStaff: publicCSchoolEmp{ private: charjobtype[50]; chardept[50]; public: CStaff*next; CStaff(){next=NULL;} CStaff(emp_staffinfo): CSchoolEmp(info.basicinfo) { strcpy(jobtype,info.jobtype); strcpy(dept,info.dept); next=NULL; } }; //用于实现链表的类 classEmpLink{ private: CSchoolEmp*head; CSchoolEmp*tail; CSchoolEmp*curr; public: EmpLink(){head=NULL;tail=NULL;curr=NULL;} EmpLink(CSchoolEmp*emp){head=emp;tail=emp;curr=NULL;} //注意: 这个两个查询函数都只能返回满足条件的单个查询结果 virtualCSchoolEmp*query(intno) { curr=head; do{ if(curr->no==no) returncurr; elsecurr=curr->next; }while(curr! =NULL); returncurr; } virtualCSchoolEmp*query(char*name) { curr=head; do{ if(! strcmp(curr->name,name)) returncurr; elsecurr=curr->next; }while(curr! =NULL); returncurr; } //采用链表形式添加条目 virtualvoidadditem(CSchoolEmp*info) { tail->next=info; tail=info; } //删除符合要求的单个记录,如成功返回0,否则返回1 virtualintdelitem(intno) { if(query(no)==NULL) return1; else{ curr=head; CSchoolEmp*tmp=head; do{ if(curr->no==no) break; else{tmp=curr;curr=curr->next;} }while(curr! =NULL); tmp->next=curr->next; deletecurr; return0; } } virtualintdelitem(char*name) { if(query(name)==NULL) return1; else{ curr=head; CSchoolEmp*tmp=head; do{ if(! strcmp(curr->name,name)) break; else{tmp=curr;curr=curr->next;} }while(curr! =NULL); tmp->next=curr->next; deletecurr; return0; } } //显示链表所有结点信息 virtualvoiddisplayall() { curr=head; while(curr! =NULL) { cout<<"\nnumber: "< cout<<"\nname: "< cout<<"\nsex: "< cout<<"\nbirthdate: "< cout<<"\njoinwork-date: "< cout<<"\nsalary: "< cout<<"\n------------------------------------------"< curr=curr->next; } } //显示链表某一结点信息 virtualvoiddisplayone(CSchoolEmp*curr) { cout<<"\nnumber: "< cout<<"\nname: "< cout<<"\nsex: "< cout<<"\nbirthdate: "< cout<<"\njoinwork-date: "< cout<<"\nsalary: "< cout<<"\n------------------------------------------"< } }; classTeacherLink: publicEmpLink{ CTeacher*head; CTeacher*tail; CTeacher*curr; public: TeacherLink(){head=NULL;tail=NULL;curr=NULL;} TeacherLink(CTeacher*emp){head=emp;tail=emp;curr=NULL;} voiddisplayall() { curr=head; while(curr! =NULL) { cout<<"\nnumber: "< cout<<"\nname: "< cout<<"\nsex: "< cout<<"\nbirthdate: "< cout<<"\njoinwork-date: "< cout<<"\nsalary: "< cout<<"\nexpert_level: "< cout<<"\nsalary_level: "< cout<<"\nschoolbelong: "< cout<<"\n------------------------------------------"< curr=curr->next; } } voiddisplayone(CTeacher*curr) { cout<<"\nnumber: "< cout<<"\nname: "< cout<<"\nsex: "< cout<<"\nbirthdate: "< cout<<"\njoinwork-date: "< cout<<"\nsalary: "< cout<<"\nexpert_level: "< cout<<"\nsalary_level: "< cout<<"\nschoolbelong: "< cout<<"\n------------------------------------------"< } }; 上述代码只给出了部分对象和链表操作的定义,主函数的设计还需由学生自行完成。 实验四一个Windows窗口应用程序的设计和实现(题目由学生选择) 一、所需主要仪器及环境: 每人微机一台,安装VC++ 二、实验目的和要求: 综合应用已学的面向对象知识,初步体验使用VC++集成开发环境开发具有window风格的复杂应用程序的方法。 要求学生能设计出一款可用的有实际意义的小软件。 三、实验主要内容: 根据所选择的题目,大致确定软件结构,划分软件的逻辑功能模块。 了解VC++的MFC基本类库,熟悉基于MFC的VC应用成的开发步骤和特殊应用的开发方法,分析windows风格的应用程序消息传递的机制。 在熟悉VC开发windows风格应用基本方法的基础上,进行软件开发设计。 注意养成添加注释的习惯,提高程序的可读性,注意保护某些特殊命令的安全执行。 四、参考实验步骤: 1分析问题,归纳对象,从而确定类层次结构,并确定其中各个类的结构(包括属性与方法),如果是数据库应用,还需要确定数据库表的结构 2根据具体应用,确定各个类的主要方法的实现算法 3结合前述类的编写方法,以及C++继承、多态性的实现方法,编程实现上述类层次结构,注意不同语言工具下,可视化编程略有不同,应结合具体的语言工具展开编程 4编译并调试程序。 参考实例: 以开发一个简单的数据库应用为例,选择后台数据库为Access,编程环境为VC++。 我们将实验3中的应用转为窗口界面,并用数据库存储职工信息。 第一步,分析问题,找出相关对象(同实验3),确定数据库表结构 这里根据应用需要至少应有4张表,分别存放职工类,教师类,行政人员类和后勤人员类的有关信息。 这4张表的结构如下 这四张表的关系为,其中TTeacher、TOfficial和TStaff表都通过empno属性与basicinfo表发生关联(注意,这里未考虑关系数据库的规范化理)。 第二步,创建Access数据源,并将其添加入ODBC数据管理器中。 第三步,创建VC++的一个MFCApplication工程,注意在创建工程并设置属性时,选择使用数据库支持,同时选择数据源为上述建好的ODBC数据源。 第四
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计