面向对象实验1.docx
- 文档编号:29850717
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:31
- 大小:515.86KB
面向对象实验1.docx
《面向对象实验1.docx》由会员分享,可在线阅读,更多相关《面向对象实验1.docx(31页珍藏版)》请在冰豆网上搜索。
面向对象实验1
面向对象程序设计
实验指导书
黄建灯朱震
桂林电子科技大学信息科技学院
二〇一一年八月
目录
实验一熟悉VisualC++开发环境学会最简单的开发2
实验二类和对象
(一)5
实验三类和对象
(二)7
实验四String类的定义和使用10
实验五String类的定义和使用(续)12
实验六继承与派生14
实验七多态性与虚函数15
第八章输入输出流16
参考文献17
附录AC++保留字18
附录B运算符优先级19
附录CASCII字符集20
附录D运算符重载21
附录EANSI/ISO标准C++和标准C++中头文件命名规则22
附录FC++头文件23
附录G系统中数据类型长度28
实验一熟悉VisualC++开发环境学会最简单的开发
1.实验目的
熟悉VisualC++的开发环境;
了解如何编辑、编译、链接和运行一个C++程序;
2.实验内容
2.1熟悉VisualC++开发环境,学会创建一个新的工程;
1)进入系统,启动VisualC++环境;
2)创建一个新的工程
在VisualC++环境中,菜单File->New...,弹出一个对话框,提示新建(new);
弹出的对话框TAB缺省在Projects页面上,选择该页面的“Win32ConsoleApplication”,在右边的Projectname输入框中输入工程名字,点击“OK”弹出新建工程向导;
3)新建向导的第一步,要求选择:
●空白工程;
●简单应用程序;
●HELLOWORLD应用程序;
●支持MFC的应用程序;
这里我们首先选择第二项:
简单应用程序,点击“finish”。
4)工程建立完成,在开发环境左侧的TAB页面中,查看ClassView和FileView内都能看到什么?
在类视图中可以看到,“简单应用程序”只有一个全局函数main,这也是应用程序的入口,和C语言中的main函数含义相同。
在文件视图中可以看到,开发环境为“简单应用程序”提供了标准全局文件“StdAfx.h”和“StdAfx.cpp”,同时提供了应用程序的源文件ProjectName.cpp。
分别点击这三个文件,可以看到源代码只是给出了程序的框架。
5)在VisualC++环境中,关闭刚才新建的文件和工程,则没有了当前激活窗口,视图呈现灰色;
6)选中菜单File->RecentFiles,可以看到刚才新建的源文件,选中,则该源文件被打开。
这里可以保存最近使用过的4个(该参数可修改)文件,以便下次快捷打开。
7)选中菜单File->RecentWorkspaces,可以看到刚才新建的工程,选中,则该工程被打开。
这里可以保存最近使用过的4个(该参数可修改)工程,以便下次快捷打开。
2.2打开一个工作区
如果打开刚刚关闭的workspace,可以利用菜单中的recentworkspace;
如果要打开的workspace在recent中已经看不到了,就需要在“打开文件对话框”中,找到工作区的存放位置。
1.点击菜单File->Open...,弹出打开文件对话框;
2.找到工作区在磁盘上的存放位置;一般都有一个和工作区名字相同的文件夹,存放工作区文件、该工程的头文件、源文件和资源文件等等。
3.工作区文件是一个以.dsw为后缀的文件,因此在文件类型过滤中要注意包含;
4.看到打开文件对话框中有projectname.dsw,点击即可。
2.3编译运行“简单应用程序”,看看这个程序框架提供了什么?
1)编译有三种方法:
单击工具栏当中的Build图标;
单击菜单Build->Build;
使用快捷键F7;
2)运行有三种方法:
单击工具栏当中的Run图标;
单击菜单Build->Run;
使用快捷键F5;
“简单应用程序”没有提供任何实质性的功能,“pressanykeytocoontinue”就可以退出程序了。
2.4尝试编辑一个小的示范程序,并编译运行;
按照上面的方法新建一个源文件,输入下面代码:
#include
intmain()
{
cout<<”HelloWorld\n”;
cout<<”WelcometoC++Programming\n”;
cout<<”Thisismyfirstcppsourcefile\n”;
return0;
}
2.5了解VisualC++中的调试工具,学会设置断点和单步跟踪;
1)设置断点的方法:
首先将程序编译通过;
将光标置于要设置断点的代码行;
选择工具栏的Breakpoint图标(或者快捷键F9),一个圆点显示在行首,表明该行已经设置了断点,这是个开关动作,重复上述动作,断点被去掉,点击可以在增加断点和去掉断点之间切换;
2)运行程序,到断点处程序中断;
3)尝试单步跟踪,在程序设置断点后,运行进入Debug状态,菜单增加了Debug项,点击菜单Debug->StepOver(或者快捷键F10),每触发一次,程序运行一步;上面的小程序,每运行一步,打印一行,可以观察到单步跟踪的效果;
4)调试工具可以完成以下任务,大家可以在调试时尝试:
设置断点
单步跟踪
监视变量、寄存器和内存
查看汇编代码和调用堆栈
修改代码和变量值
2.6写一个短小的windows程序,体会消息触发机制;
1)创建一个新的“Win32ConsoleApplication”,在选项中选择helloworld应用程序;
2)点击“finish”完成创建工程,可以看到系统提供了程序框架,包括头文件、源文件和资源文件;
3)类视图中可以看到WinMain全局函数和WndProc全局函数;
4)编译运行,看看系统提供的helloworld应用究竟是什么?
5)点击左边的“WndProc”函数,右边的视图就跳到了这个函数相应的位置,在该函数的switch分支中增加:
caseWM_LBUTTONDOWN:
MessageBox(NULL,“pressedtheleftbuttonofmouse!
”,“Message”,NULL);
break;
编译运行,在窗口范围内,点击鼠标左键,看看有什么?
3.思考题
课后自己查资料,结合我们这次实验的实例,了解什么是消息触发机制。
实验二类和对象
(一)
1.实验目的
(1)掌握声明类的方法,类和类的成员的概念以及定义对象的方法。
(2)初步掌握用类和对象编制基于对象的程序。
(3)学习检查和调试基于对象的程序。
2.实验内容
(1)有以下程序:
#include
usingnamespacestd;
classTime
{public:
inthour;
intminute;
intsec;
};
intmain()
{Timet1;
cin>>t1.hour;
cin>>t1.minute;
cin>>t1.sec;
cout< "< "< return0; } 改写程序,要求: A)将数据成员改为私有的; B)将输入和输出功能改为成员函数实现; C)在类体内定义成员函数。 然后编译和运行程序。 请分析什么成员应指定为公有、什么指定我私有的? 什么函数最好放在类中定义? 什么函数最好放在类外定义? (2)分别给出如下的3个文件: A)含类定义的头文件student.h。 //student.h classStudent {public: voiddisplay(); private: intnum; charname[20]; charsex; }; B)包含成员函数定义的源文件student.cpp //student.cpp #include #include"student.h" voidstudent: : display() {cout<<"num: "< cout<<"name: "< cout<<"sex: "< } C)包含主函数的源文件main.cpp //main.cpp #include #include”student.h” intmain() {Studentstud; stud.display(); return0; } (1)请完善该程序,在类中增加一对数据成员赋值的成员函数set_value。 上机调试并运行。 (3)需要求3个长方柱的体积,请编一个基于对象的程序,数据成员包括length(长)、width(宽)、height(高)。 要求用成员函数实现以下功能: A)由键盘分别输入3个长方柱的长、宽、高; B)计算长方柱的体积; C)输出长方柱的体积。 3.预习内容 《C++面向对象程序设计》第2章。 实验三类和对象 (二) 1.实验目的 (1)进一步加深对类和对象的理解。 (2)掌握类的构造函数和析构函数的概念和使用方法。 (3)掌握是对对象数组、对象的指针、及其使用方法。 (4)掌握友元的概念的使用。 (5)了解类模板的使用方法。 2.实验内容 (1)有以下程序: #include classStudent {public: Student(intn,floats): num(n),score(s){} voidchange(intn,floats){num=n;score=s;} voiddisplay(){cout< private: intnum; floatscore; }; voidmain() {Studentstud(101,78.5); stud.display() stud.change(101,80.5); stud.display(); } A)阅读此程序,分析其执行过程,然后上机运行,对比输出结果。 B)修改上面的程序,增加一个fun函数,改写main函数。 在main函数中调用fun函数,在fun函数中调用change和display函数。 在fun函数中使用对象的引用(Student&)作为参数。 (2)商店销售某一商品,商店每天公布统一的折扣(discount)。 同时允许销售人员在销售是灵活掌握售价(price),在此基础上,对一次购买10件以上者,还可以享受9.8折优惠。 现已知当天3个销售员销售情况为 销售员号(num)销售件数(quantity)销售单价(price) 101523.5 1021224.56 10310021.5 请编程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。 要求用静态数据成员和静态成员函数。 提示: 将折扣discount,总销售款宿命和商品销售总件数n声明为静态数据成员, 在定义静态成员函数average(求平均售价)和display(输出结果)。 (3)有以下程序: #include usingnamespacestd; classDate; classTime {public: Time(int,int,int); voiddisplay(Date&); private: inthour; intminute; intsec; }; classDate {public: Date(int,int,int); friendvoidTime: : display(Date&); private: intmonth; intday; intyear; }; Time: : Time(inth,intm,ints) {hour=h; minute=m; sec=s; } voidTime: : display(Date&d) {cout< cout< "< "< } Date: : Date(intm,intd,inty) {month=m; day=d; year=y; } intmain() {Timet1(10,13,56); Dated1(12,25,2004); t1.display(d1); return0; } 分析和运行程序,注意友元函数Time: : display的作用。 将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。 在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。 修改后调试运行。 (4)有以下使用类模板程序 #include usingnamespacestd; templat classCompare {public: Compare(numtypea,numtypeb) {x=a;y=b;} numtypemax() {return(x>y)? x: y;} numtypemin() {return(x>y)? x: y;} private: numtypex,y; }; intmain() {Compare cout< cout< < Compare cout< cout< Compare cout< cout< return0;} A)运行此程序,体会类模板的作用。 B)将它改写为在类模板外定义各成员函数。 3.预先内容 《C++面向对象程序设计》第3章。 实验四String类的定义和使用 1.实验目的 在具备C++字符串知识的基础上,将思维转换到面向对象上来,理解和使用String类; 掌握重载运算符函数; 开始理解和关注程序运行中和内存有关的问题; 2.相关知识介绍 2.1String类的介绍 2.2String类的定义 ClassString{ char*str; intsize; voidError(interrorType,intbadIndex=0)const;//出错报警函数 public: String(char*s); String(constString&s);//复制构造函数 ~String(void); //重载赋值运算符函数 String&operator=(constString&s);//String类的对象赋值 String&operator=(char*s);//字符串赋值给对象 //重载关系运算符函数 intoperator==(char*str,constString&s); intoperator<(constString&s)const;//判断调用对象是否小于形参 intoperator<(char*str)const; friendintoperator<(char*str,constString&s); intoperator>(constString&s)const; intoperator>(char*str)const; friendintoperator>(char*str,constString&s); //重载算术运算符函数 Stringoperator+(constString&s)const; Stringoperator+(char*str)const; friendintoperator+(char*str,constString&s); //将对象转换成C++字符串 operatorchar*(void)const; //重载输出运算符函数 friendostream&operator<<(ostream&ostr,constString&s); intLength(void)const; };//类定义完毕 3.实验内容 阅读String类的知识介绍,以及类的定义。 这个String类的定义涉及到许多面向对象的概念: 构造函数、析构函数、复制构造函数, 重载赋值、关系、算术运算符函数, 对于程序异常的处理: 数组下标越界和内存耗尽 所以对于课堂上学习的内容在实际中的应用,需要仔细琢磨,理解并能够应用。 将类的定义在VisualC++环境下编译,并编译通过。 上面给出的类定义,需要配合环境调试通过,比如包含头文件,修改编辑以及编译错误等。 将String类的定义中的构造函数、析构函数实现 1)实现构造函数String(char*s); 2)实现复制构造函数String(constString&s); 3)实现析构函数~String(void); 4.思考题 String类对象和字符串究竟有什么不同? 面向对象的String类究竟给字符串处理带来了什么优势? 实验五String类的定义和使用(续) 1.实验目的 在具备C++字符串知识的基础上,将思维转换到面向对象上来,理解和使用String类; 掌握重载运算符函数; 开始理解和关注程序运行中和内存有关的问题; 2.实验内容 2.1将String类的重载赋值运算符函数实现 1)实现String类的对象赋值String&operator=(constString&s); 2)实现字符串赋值给对象String&operator=(char*s); 2.2将String类的重载关系运算符函数实现 1)实现字符串相等判断函数: intoperator==(char*str,constString&s); 2)实现调用对象所含的字符串是否小于形参s所含的字符串的判断: intoperator<(constString&s)const; 3)实现调用对象所含的字符串是否小于形参字符串str的判断: intoperator<(char*str)const; 4)实现调用形参字符串str是否小于形参s所含字符串的判断: friendintoperator<(char*str,constString&s); 5)实现调用对象所含的字符串是否大于形参s所含的字符串的判断: intoperator>(constString&s)const; 6)实现调用对象所含的字符串是否大于形参字符串str的判断: intoperator>(char*str)const; 7)实现调用形参字符串str是否大于形参s所含字符串的判断: friendintoperator>(char*str,constString&s); 2.3将String类的重载算术运算符函数实现 8)实现调用对象和形参对象所含的字符串相加 Stringoperator+(constString&s)const; 9)实现调用对象所含的字符串和形参的字符串str相加 Stringoperator+(char*str)const; 10)实现形参字符串str和形参s所含的字符串相加 friendintoperator+(char*str,constString&s); 2.4将String类的出错报警函数实现 11)实现出错报警函数: voidError(interrorType,intbadIndex=0)const; 出错报警函数能够根据入参传递的错误类型,给出相应的错误告警。 2.5将String类的重载输出运算符函数实现 12)实现重载输出运算符函数 ostream&operator<<(ostream&ostr,constString&s); 完成把s所含的字符串输出到屏幕上。 2.6实现将字符串转换成String对象 13)实现将字符串转换成String对象 operatorchar*(void)const; 2.7实现返回对象所含字符串的长度 14)实现返回对象字符串的长度 intLength(void)const; 2.8检验字符串对象的连接、计算长度和输出 s1=string,s2=class 要求完成连接功能,能够计算字符串的长度,编译运行得到输出: string和class连接成stringclass Lengthof“stringclass”=12 2.9检验字符串对象的复制、赋值、输出 1)要求将上面的s1+s2连接得到的字符串赋值到s4当中; 2)再将s4的内容后面增加“inMFCis”; 3)将s4的内容后面连接上“Cstringclass” 4)将s4的内容输出到屏幕上; 按照要求完成程序,编译运行,得到输出: stringclassinMFCisCstringclass 2.10检验字符串的比较大小 1)任意输入两个字符串 2)将输入的字符串转换成String对象 3)给出比较大小的结果 实验六继承与派生 1.实验目的 (1)了解继承在面向对象程序设计中的重要作用。 (2)进一步理解继承和派生的概念。 (3)掌握通过继承派生出一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 实验