vc++面向对象编程实验指导书1

1159183349

贡献于2016-11-07

字数:0 关键词: C/C++开发

VC++面向对象编程实验指导书 机电学院 编写:曹建荣 齐鲁理工学院 2016 年 9 月 VC++面向对象编程实验指导书 1 前 言 《VC++面向对象编程》是通信专业的一门选修课程。面向对象软件开发方 法是吸收了软件工程领域有益概念和有效的方法而发展起来的一种软件开发方 法。它集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化、 数据抽象程度高的,体现信息隐蔽、可复用、易修改、易扩大等特性的程序。本 课程主要介绍面向对象程序设计的方法和 C++语言的基本概念以及基本 Windows 编程技术,其中以 C++语言中的面向对象机制为主。学习者在学习过程 中可以通过大量的程序实例和相关练习,逐步掌握 C++的面向过程和面向对象的 功能,从而掌握面向对象程序设计的基本知识和基本技能。在学习本课程中,只 有通过大量的上机实验,才能使学生更好的掌握面向对象程序设计的方法,提高 学生运用 C++语言和面向对象思想进行编程来解决实际问题的能力。本课程实验 要求学生通过对各部分实验的具体操作练习,能够熟练的掌握 C++的基本内容, 包括控制结构、基本数据类型、表达式、函数、指针和引用、类与对象的概念以 及封装、继承和多态等面向对象程序设计的基础理论,在这些基础理论的基础上, 掌握初步的基于 MFC 的 Windows 编程技术,包括消息传递机制、MFC 应用程 序框架、文档视图结构、菜单、对话框、图形图像、网络编程等。 本实验指导书在编写过程中参考了大量其它院校和网络上的相关资源,在此 不再列出,一并表示感谢! 编者 2016 年 9 月 VC++面向对象编程实验指导书 2 目 录 实验一 VC + +开发环境应用入门 ...................................................................... 2 实验二 类与对象 ........................................................................................................... 7 实验三 继承与派生 ....................................................................................................11 实验四 多态性与虚函数 ........................................................................................ 16 实验五 C + +程序结构 ............................................................................................ 20 实验六 MFC 编程基础 ........................................................................................... 24 实验七 对话框和常用控件编程 ......................................................................... 30 实验八 菜单编程 ........................................................................................................ 31 实验九 文件编程 ............................................................................................................. 实验十 网络编程……………………………………………………………………….. 综合实验 1 .............................................................................................................................. 综合实验 2 .............................................................................................................................. VC++面向对象编程实验指导书 3 实验一 VC+ +开发环境应用入门 一、实验目的 1.了解 Visual C+ +的特点。 2.熟悉 Visual C+ + 2010 的开发环境。 3.学习用 Visual C+ +编写标准的 C+ +控制台程序。 二、实验内容 1.使用 Visual C+ +建立一个非图形化的标准 C+ +程序,编译、运行以下程序: #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { cout<<“Hello!\ n”; cout<<“Welcome to C+ +! \ n”; return 0; } 2.从键盘上输入两个数,分别求出这两个数的和、差、积。 要求:1) 求两个数的和、差、积分别用三个函数实现。 2) 要求和、差、积分别存放在不同的文件中,实现一个 VC 多个文件。 3. 编程实现课件中函数调用的数据传递方式的实例,感受值传递;地址传递;引用传递 的区别。 三、实验步骤 1.启动 Visual C+ +2010 开发环境 2.创建一个项目 3.建立 C++源程序文件 4.编辑 C++源程序文件内容 5.建立并运行可执行文件 6.关闭工作空间 四、实验报告要求 1.报告要求上交打印版和电子版,要求排版规范,描述语言简练、规范,实验结果截 VC++面向对象编程实验指导书 4 屏图像清晰完整,不得相互抄袭。 2.报告中应写清姓名、学号、班级、实验日期、实验题目、实验目的、实验内容及实 验过程。 3.无论实验完成与否,均应有实验结果分析。报告中应含源代码,如调试通过,请注 明“通过”并写出或打印出运行结果;如未调试通过或结果不正确,请分析原因。 附: 参考程序: 2. 1)求两个数的和、差、积分别用三个函数实现。 #include using namespace std; int add(int x,int y) { return (x+y); } int sub(int x,int y) { return (x-y); } int mul(int x,int y) { return (x*y); } int _tmain(int argc, _TCHAR* argv[]) { int a,b; cout<<"enter two numbers:"; cin>>a>>b; cout<<"he is:"< using namespace std; int add(int,int); int sub(int,int); int mul(int,int); VC++面向对象编程实验指导书 5 int _tmain(int argc, _TCHAR* argv[]) { int a,b; cout<<"enter two numbers:"; cin>>a>>b; cout<<"he is:"< using namespace std; void Swap (int x,int y); //值传递的交换函数原型说明 int _tmain(int argc, _TCHAR* argv[]) { int a=6,b=8; cout<<"未调用函数前 a="<ShowPerson(); p1->SetAge( 19 ); cout << "person1: \t"; p1->ShowPerson(); p2=new Person("Zhang3", 19, 'm'); //动态生成一个 Person 对象 cout << "person2: \t"; p2->ShowPerson(); *p2 = *p1; //对象之间的赋值 cout << "person2: \t"; p2->ShowPerson(); delete p1; //释放 p1 指针指向对象所占的空间 delete p2; //释放 p2 指针指向对象所占的空间 return 0; } VC++面向对象编程实验指导书 9 2. 定义一个日期类 Date,它包括年、月、日三个数据成员,以及分别判断是否为闰年、 设置年月日和输出年月日三个成员函数,编写程序进行测试。 参考 ppt 例子。 3. 定义一个职工 TEmployee 类,它包括姓名、性别、年龄、移动电话 4 个数据成员和 实现输入职工数据和显示职工属性的两个成员函数,编写程序进行测试。 参考程序: //头文件 TEmployee.h 的内容 #include #include using namespace std; class TEmployee { private: char m_strName[20]; int m_nAge; char m_nSex; int m_telphnum ; public: TEmployee(void); ~TEmployee(void); TEmployee ( const char *name, int age, char sex, int telnum ); //构造函数 void SetName( const char *name ); void SetAge( int age ); void SetSex( char sex ); void SetPhonenum(int phnum); int GetPhnum(); const char* GetName() const; int GetAge() const; char GetSex() const; void ShowMe(); }; //源程序文件 TEmployee.cpp 的内容: #include " TEmployee.h" TEmployee::TEmployee(void): m_nAge( 0 ), m_nSex( 0 ), m_telphnum (0) //构造函数 { strcpy( m_strName, "XXX" ); } TEmployee::~TEmployee(void) { cout<<"Now destroying the instance of TEmployee "< #include using namespace std; class Person { private: char m_strName[20]; int m_nAge; int m_nSex; public: Person(void); //构造函数 ~Person(void); //析构函数 Person( const char *name, int age, char sex ); //构造函数 void SetName( const char *name ); void SetAge( int age ); void setSex( char sex ); const char* GetName() const; int GetAge() const; char GetSex() const; void ShowMe() const; }; //源程序文件 Person.cpp 的内容: #include "Person.h" Person::Person(void): m_nAge( 0 ), m_nSex( 0 )//构造函数 { strcpy( m_strName, "XXX" ); } Person::~Person(void) { cout<<"Now destroying the instance of Person"< using namespace std; class A { public: A() { cout<<"Constructor1_A"<< x << endl; } A( int m ) : x( m ) { cout<<"Constructor2_A"<< x << endl; } ~A() { cout<<"Destructor_A"<< x << endl; } private: int x; }; class B : public A { public: B() { cout<<"Constructor1_B"<< y << endl; } VC++面向对象编程实验指导书 14 B( int m, int n, int l ) : A( m ), a( n ), y( l ) { cout<<"Constructor2_B"<< y < using namespace std; class Sample { public: Sample ( ){ ++n; } static int HM(){ return n; } ~Sample ( ){ --n; } private: static int n; }; int Sample::n = 10; int _tmain(int argc, _TCHAR* argv[]) { Sample c1,c2; Sample *p = new Sample(); cout< #include using namespace std; class Cperson { private: string name; int no; string sex; public: Cperson(string x,int y,string z) { name=x; no=y; sex=z; } void Cpout() { cout<<"基本信息: 姓名:"< using namespace std; class Point { private: int _x, _y; public: Point& operator++(); Point operator++(int); //返回值 Point& operator--(); //返回引用 Point operator--(int); Point() { _x = _y = 0; } int x() { return _x; } int y() { return _y; } }; Point& Point::operator++() { _x++; _y++; return *this; } Point Point::operator++(int) { Point temp = *this; VC++面向对象编程实验指导书 17 ++*this; return temp; } Point& Point::operator--() { _x--; _y--; return *this; } Point Point::operator--(int) { Point temp = *this; --*this; return temp; } int _tmain(int argc, _TCHAR* argv[]) { Point A; cout << "A 的值为:" << A.x() << " , " << A.y() << endl; A++; cout << "A 的值为:" << A.x() << " , " << A.y() << endl; ++A; cout << "A 的值为:" << A.x() << " , " << A.y() << endl; A--; cout << "A 的值为:" << A.x() << " , " << A.y() << endl; --A; cout << "A 的值为:" << A.x() << " , " << A.y() << endl; return 0; } 2.内容 2 参考程序如下: #include using namespace std; class vehicle { private: int MaxSpeed; int Weight; public: vehicle(){MaxSpeed=0; Weight=0;}; ~vehicle(){}; VC++面向对象编程实验指导书 18 virtual void Run() {cout << "A vehicle is running!" << endl; } virtual void Stop() {cout << "A vehicle has stopped!" << endl; } }; class bicycle : virtual public vehicle { private: int Height; public: bicycle(){}; ~bicycle(){}; void Run() {cout << "A bicycle is running!" << endl; } void Stop() {cout << "A bicycle has stopped!" << endl; } }; class motorcar : virtual public vehicle { private: int SeatNum; public: motorcar(){}; ~motorcar(){}; void Run() {cout << "A motorcar is running!" << endl; } void Stop() {cout << "A motorcar has stopped!" << endl; } }; class motorcycle : public bicycle , public motorcar { public: motorcycle (){}; ~motorcycle (){}; void Run() {cout << "A motorcycle is running!" << endl; } void Stop() {cout << "A motorcycle has stopped!" << endl; } }; int _tmain(int argc, _TCHAR* argv[]) { vehicle * ptr; vehicle a; bicycle b; motorcar c; motorcycle d; a.Run(); a.Stop(); b.Run(); b.Stop(); c.Run(); VC++面向对象编程实验指导书 19 c.Stop(); d.Run(); d.Stop(); ptr = &a; ptr->Run(); ptr = &b; ptr->Run(); ptr = &c; ptr->Run(); ptr = &d; ptr->Run(); return 0; } 四、实验报告要求 1.报告请用专门的实验报告纸书写,字迹清晰,格式规范。 2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验内容及实验过程。 3.无论实验完成与否,均应有实验结果分析。报告中应含源代码,如调试通过,请注 明‘通过’并写出或打印出运行结果;如未调试通过或结果不正确,请分析原因。 VC++面向对象编程实验指导书 20 实验五 C ++程序结构 一、实验目的 1. 理解数据类型、变量、运算符、表达式的概念。 2. 学会用算术表达式、关系表达式、赋值表达式完成数据处理工作。 3. 掌握 if 语句的格式与使用方法,掌握 switch 语句的格式与使用方法。 4. 掌握 for 语句的格式与用法,掌握 while 语句的格式与使用方法。 5. 掌握一、二维数组的定义、初始化赋值、数组元素的引用方法。 二、实验内容 1. 输入一行字符,分别统计出其中英文字母、空格、数字字符和其它字符的个数。 提示:用 cin.get(c)函数从键盘上输入一个字符给变量 c,直到输入回车换行字符'\n'为止。 2. 某班第 1 组有 10 个学生,进行了 C++考试,编写程序将考试成绩输入一维数组,并 求出 C++的平均成绩及优(90~100)、良(80~89)、中(70~79)、及格(60~69)与不及格 (0~59)学生的人数。 实验数据:90、85、80、75、70、65、60、55、50、45 3. 输入一个 5 行 5 列的二维数组,编程实现: 求出其中的最大值和最小值及其对应的行列位置; 求出对角线上各元素之和。 实验数据: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 三、实验步骤 1. 实验内容 1 的参考代码: # include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char c; int i,letter=0,number=0,blank=0,other=0; cout<<"请输入字符串:"; cin.get(c); //get(c)函数用于从键盘上提取一个字符 while(c!='\n') { VC++面向对象编程实验指导书 21 if ('a'<=c && c<='z' || 'A'<=c && c<='Z') letter++; else if ('0'<=c && c<='9') number++; else if (c==' ') blank++; else other++; cin.get(c); } cout<<"letter="<>a[i]; for (i=0;i<=N-1;i++) { sum=sum+a[i]; switch (a[i]/10) { case 10: case 9: b[0]++; break; case 8: b[1]++; break; case 7: VC++面向对象编程实验指导书 22 b[2]++; break; case 6: b[3]++; break; default: b[4]++; } } cout<<"优: "< #define N 5 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { float a[N][N],max,min,sum; int i,j,r1=0,r2=0,c1=0,c2=0; cout<<"Input a[5][5]:"<>a[i][j]; max=min=a[0][0]; sum=0; VC++面向对象编程实验指导书 23 for(i=0; imax) { max= a[i][j]; r1=i; c1=j; } else if (a[i][j]“新建”->“项目”,在弹出的“新 建项目”话框中选择“MFC”“MFC 应用程序”,如图 2.1 所示; 图 2.1 MFC 新建项目 VC++面向对象编程实验指导书 25 (2)输入要建立的工程所在的位置; (3)输入名称,例如“Mfcsdi”,单击确定按钮,弹出 MFC 应用程序 向导对话框,如图 2.2, 单击下一步; 图 2.2 MFC 应用程序向导 (4)在第一步中选择“单文档”,建立一个单文档界面应用程序 SDI,项目类型选“MFC 标 准”, 如图 2.3 所示。 图 2.3 选择参数 (5)其它选取其默认值,直到结束; VC++面向对象编程实验指导书 26 (6)添加自己的代码: 扩充 MfcsdiView.cpp 中的 OnDraw 成员函数: void CMfcsdiView::OnDraw(CDC* /*pDC*/) { CMfcsdiDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码(add draw code for native data here ) pDC->TextOut (60,100,"Hello,Welcome to Visual C++ 2010!"); } 请思考: 1) 为什么会出错? 2) 如何修改? 提示:void CMfcsdiView::OnDraw(CDC* pDC) pDC->TextOut (60,100,CString("Hello,Welcome to Visual C++ 2010!")); (7)更改应用程序的标题: . 在解决方案资源管理器中,双击“资源文件”中的“Mfcsdi.rc”,弹出“资源视图”,双 击 String Table,弹出字符串资源表,如图 2.4 所示。 选中 IDR_MAINFRAME 项,在标题编辑框中将标题 Mfcsdi 修改为单文档应用程序。 图 2.4 更改应用程序标题 VC++面向对象编程实验指导书 27 2. 多文档应用程序 多文档(MDI)接口应用程序是指一个应用程序可以同时打开多个文件进行处理。 在 MDI 程序中许多程序的细节是与 SDI 程序是相同的。在 MDI 程序中使用了 CMultiDocTemplate 模板,以便程序能够处理多个文档,同时也将视图和文档类连接到该模 板及 CChildFrame 类,CChildFrame 类支持出现在主窗口内部的 MDI 子窗口。 按照上述创建单文档应用程序的步骤创建一个名为 Mfcmdi 多文档应用程序,不同的是 在创建工程的第一步中选择“多个文档”。 编译、链接并运行后,查看结果,如图 2.5。 图 2.5 多文档程序运行结果 3. 添加键盘消息响应 1)建立一个名称为 KeyMessage 的 MFC 单文档工程(名字可以自己起,不一定和例子 一样),为了存储用户每次在键盘上按下的字符或数字,首先需要定义一个视图类的成员变 量来存储用户按下的键盘内容,找到视图类 CKeyMessageView 的 类 声 明 文 件 KeyMessageView.h,然后在该文件的类声明中加上 CString m_strShowContent; 此处类 CString 是 MFC 中用来存储和管理字符串的类,它提供了对字符串的一系列方便的操作。 2)添加响应键盘消息的消息映射函数:打开类视图,在 CKeyMessageView 类上右击选 择类向导[ClassWizard],然后进入类向导对话框中,点击消息,选择 WM_CHAR 消息即为 键盘消息,然后单击添加处理程序,然后单击编辑代码[Edit Code]进入相应的消息响应函数 中编辑代码。 3)在 WM_CHAR 的消息映射函数 OnChar()中按照如图 2.6 添加代码,其中的 if 语句 VC++面向对象编程实验指导书 28 用于判断用户的键盘消息是否是通过按下字符或数字发送过来的,然后将按下的键盘字符代 码转化成 CString 类型存储起来,最后通过调用 Invalidate()和 UpdateWindow()重新刷新屏幕, 调用 Invalidate()和 UpdateWindow()后系统会立即发送 WM_PAINT 消息并刷新屏幕, WM_PAINT 消息执行过程中会调用视图类的 OnDraw()函数重画视图。 图 2.6 添加程序代码 4)最后需要在屏幕上显示键盘上按下的内容,即成员变量 m_strShowContent 中存储的 内容,前面提到用户按下键盘上的字符或数字后,需要调用 Invalidate()和 UpdateWindow()来 刷新屏幕,而 Invalidate()和 UpdateWindow()的调用会导致系统调用视图类中的 OnDraw()函 数来重画视图,所以显示工作就在视图类的 OnDraw()函数中进行,此处可以直接利用 OnDraw() 中 传 过 来 的 参 数 pDC 的 成 员 函 数 TextOut 在 坐 标 为 ( 0,0 ) 的 地 方 显 示 m_strShowContent 中的内容,如图 2.7 所示。 图 2.7 OnDraw 中添加代码 VC++面向对象编程实验指导书 29 5)编译调试,实验结果如图 2.8 所示。 图 2.8 实验结果 四、实验报告要求 1.报告请用专门的实验报告纸书写,字迹清晰,格式规范。 2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验内容及实验过程。 3.无论实验完成与否,均应有实验结果分析。报告中应含源代码,如调试通过,请注 明‘通过’并写出或打印出运行结果;如未调试通过或结果不正确,请分析原因。 VC++面向对象编程实验指导书 30 实验七 对话框和常用控件编程 一、实验目的 1. 掌握对话框和 CDialog 类; 2. 掌握对话框的创建、显示和数据校验机制; 3. 掌握模态对话框和非模态对话框的使用用方法; 4. 掌握常用控件的使用方法。 二、实验内容 创建一个基于对话框的应用程序,用来实现加法运算的功能。 三、实验步骤 结合上课讲解和课件,按步骤完成实现加法运算的基于对话框的程序。 四、实验报告要求 1.报告请用专门的实验报告纸书写,字迹清晰,格式规范。 2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验内容及实验过程。 3.无论实验完成与否,均应有实验结果分析。报告中应含源代码,如调试通过,请注 明‘通过’并写出或打印出运行结果;如未调试通过或结果不正确,请分析原因。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档