}
private:
floatspeed;
inttotal;
}
intmain()
{
Vehiclea(120,4);
a.ShowMember();
Vehicleb;
a.ShowMember();
}
(1)编译该程序,修改程序错误
(2)分别在创建对象,构造函数处设置断点,调试运行。
(3)写出程序运行结果
2.WindowsSDK应用程序编写
下面是一个SDK应用程序的示例,该程序的功能是构造一个编辑框控件和一个按钮。
编辑框用于输入一元二次方程的系数,各系数之间用逗号分隔,当单击“计算”按钮,获取方程系数,然后将求得的根通过TextOut显示在窗口客户区中。
#include
#include
#include
//求一元二次方程的根,函数返回根的个数
intGetRoot(floata,floatb,floatc,double*root)
{
doubledelta,deltasqrt;
delta=b*b-4.0*a*c;
if(delta<0.0)return0;//无根
deltasqrt=sqrt(delta);
if(a!
=0.0){
root[0]=(-b+deltasqrt)/(2.0*a);
root[1]=(-b-deltasqrt)/(2.0*a);
}else
if(b!
=0.0)root[0]=root[1]=-c/b;
elsereturn0;
if(root[0]==root[1])return1;
elsereturn2;
}
charstr[80];
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口过程
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,
LPSTRlpCmdLine,intnCmdShow)
{
HWNDhwnd;//窗口句柄
MSGmsg;//消息
WNDCLASSwndclass;//窗口类
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName="SDKWin";//窗口类名
if(!
RegisterClass(&wndclass))//注册窗口
{
MessageBox(NULL,"窗口注册失败!
","HelloWin",0);return0;
}
//创建窗口
hwnd=CreateWindow("SDKWin",//窗口类名
"实验1——Windows编程基础",//窗口标题
WS_OVERLAPPEDWINDOW,//窗口样式
CW_USEDEFAULT,//窗口最初的x位置
CW_USEDEFAULT,//窗口最初的y位置
CW_USEDEFAULT,//窗口最初的x大小
CW_USEDEFAULT,//窗口最初的y大小
NULL,//父窗口句柄
NULL,//窗口菜单句柄
hInstance,//应用程序实例句柄
NULL);//创建窗口的参数
ShowWindow(hwnd,nCmdShow);//显示窗口
UpdateWindow(hwnd);//更新窗口,包括窗口的客户区
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);//转换某些键盘消息
DispatchMessage(&msg);//将消息发送给窗口过程,这里是WndProc
}
returnmsg.wParam;
}
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
HDChdc;
PAINTSTRUCTps;
staticHWNDhwndButton,hwndEdit;
charstrEdit[80],strA[3][80],strHint[80];
floata[3];
doubleroot[2];
inti,j,k,m;
switch(message)
{
caseWM_CREATE:
//窗口创建产生的消息
hwndEdit=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,
10,60,200,25,hwnd,NULL,NULL,NULL);
hwndButton=CreateWindow("button","计算",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
240,60,80,25,hwnd,NULL,NULL,NULL);
return0;
caseWM_COMMAND:
//命令消息,控件产生的通知代码在wParam的高字中
if(((HWND)lParam==hwndButton)&&(HIWORD(wParam)==BN_CLICKED)){
//获取编辑框控件的内容,并将其转换成float数值
GetWindowText(hwndEdit,strEdit,80);//获取编辑框内容
//分隔字符串
k=0;m=0;
for(j=0;j<80;j++){
if(strEdit[j]==','){
k++;m=0;
}
else{
strA[k][m]=strEdit[j];m++;
}
}
for(i=0;i<3;i++)
a[i]=(float)atof(strA[i]);//将字符串转换成float数值
intn=GetRoot(a[0],a[1],a[2],root);
if(n<1)strcpy(str,"方程无根!
");
elsesprintf(str,"方程的解为:
%f,%f",root[0],root[1]);
InvalidateRect(hwnd,NULL,TRUE);
}
caseWM_PAINT:
hdc=BeginPaint(hwnd,&ps);
strcpy(strHint,"请输入一元二次方程的3个系数,中间用逗号分隔");
TextOut(hdc,10,40,strHint,strlen(strHint));
TextOut(hdc,10,90,str,strlen(str));
EndPaint(hwnd,&ps);
return0;
caseWM_DESTROY:
//当窗口关闭时产生的消息
PostQuitMessage(0);
return0;
}
returnDefWindowProc(hwnd,message,wParam,lParam);//执行默认的消息处理
}
(1)请仔细阅读该程序,写出该程序的设计思路。
(2)参考上面的代码,使用SDK方式编写一窗口应用程序,能实现简单的画线功能。
a.设计思想
b.程序源代码(要求有详细的注释)
c.调试分析&运行结果
d.用户使用说明(输入/输出规定)
实验2类和对象
一、实验目的
1.掌握类的定义方法,能合理指定类中成员的访问权限。
2.学习对象的说明和使用方法。
3.灵活运用类和对象的相关知识进行综合程序设计。
二、实验知识点概念
类是对同一类事物的抽象描述,其数据成员用于描述该类事物的属性,成员函数完成修改、获取属性值或实现基于属性的某些操作。
类不占用存储空间。
对象是类的实例,对象占用存储空间。
C++中类与结构体并没有本质的区别,结构体中也可以定义成员函数,也可以指定各个成员的访问权限。
两者的唯一差异在于:
结构中成员的缺省访问权限是公有的,而类中成员的缺省访问权限是私有的。
三、实验题目
1.设计个人信息类CPerson和学生成绩类CScore。
其中,CPerson类的数据成员是姓名和学号;CScore类的数据成员除了三门成绩外,还有一个CPerson类对象stu。
2.设计数据操作类CStack,它使用数组来动态存储CScore类对象,并模拟栈的操作:
push(压入)与pop(弹出)。
栈是一种“FILO”(先进后出)或“LIFO”(后进先出)的存储结构。
如图2-1所示,它占用一块连续的内存空间,有两个端点:
一个端点是固定的,称为栈底;另一个端点是活动的,称为栈顶。
操作只能在栈顶进行,建立一个栈先要开辟栈空间,且为了指示栈顶位置还要设定一个指针,称为栈顶指针(图2-1中的SP)。
初建栈时,栈顶指针SP指向栈底,如图2-1(a)所示。
当向栈内压入一个元素d1时,先向栈顶写入d1,再将SP++,如图2-1(b)所示。
再压入一个元素d2时,先向栈顶写入d2,再将SP++,如图2-1(c)所示。
可见,栈顶总是用于存放下一个元素。
当栈内弹出一个元素d2时,直接执行SP--,然后返回SP中的内容,如图2-1(d)所示。
这样,当再次压入新元素时,d2被覆盖。
栈
空
间
SP
d1
栈底
(a)空栈(b)压入d1
图2-1栈模型
栈
空
间
d2
d1
栈底
SP
SP
(c)压入d2(d)弹出d2
图2-1栈模型
四、程序思路
五、程序源代码(要求有详细的注释)
六、用户使用说明(输入/输出规定)
七、调试分析&运行结果
实验3继承和派生
一、实验目的
继承与派生是面向对象的特性,是面向对象程序设计模拟客观世界的手段之一,通过实验要求掌握:
1.掌握类的继承与派生关系及实现方法,理解类的层次结构。
2.掌握派生类构造函数初始化基类成员的方法。
3.灵活运用继承和派生的相关知识进行综合程序设计。
二、实验知识点概念
类的继承是新的类从已有类那里得到已有的特性。
从已有的类产生新类的过程就是类的派生。
在继承过程中,原有的类或已经存在的用来派生新类的类称为基类或父类,而由已经存在的类派生出的新类则称为派生类或子类。
根据派生类所拥有的基类数目不同,可以分为单继承和多继承。
一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。
三、实验题目
编写一个程序实现小型公司的工资管理。
该公司主要有4类人员:
经理、兼职技术人员、销售员和销售经理。
要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。
月工资计算办法是:
经理拿固定月薪8000元,兼职技术人员按每小时100元领取月薪,销售员按该当月销售额的4%提成,销售经理即拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5%。
四、程序思路
五、程序源代码(要求有详细的注释)
六、用户使用说明(输入/输出规定)
七、调试分析运行结果
实验4多态性和虚函数
一、实验目的
1.了解多态性在C++中的体现。
2.掌握虚函数的应用。
3.理解抽象类。
二、实验知识点概念
●多态性
⏹多态是指同样的消息被不同类型的对象接收时导致不同的行为,所谓消息是指对类的成员函数调用,不同的行为是指不同的实现,也就是调用了不同的函数。
⏹多态性可分为四类:
重载多态、强制多态、包含多态和参数多态。
⏹多态从实现的角度来讲可以划分为两类:
编译时的多态和运行时的多态。
编译时的多态性是在编译的过程中确定了同名操作的具体操作对象,也就是通过重载函数来实现的。
运行时的多态性是在程序运行过程中才动态地确定操作所针对的具体对象,就是用虚函数来实现的。
●虚函数
⏹虚函数是重载的另一种表现形式,它是一种动态的重载方式,它提供了一种更为灵活的多态性机制。
虚函数允许函数调用与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,即所谓的“动态连接”。
⏹一般虚函数成员的定义语法是:
⏹virtual函数类型函数名(形参表)
⏹虚函数的定义实际就是在原有的普通函数成员前面使用virtual关键字来限定,虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员的函数体中。
⏹运行过程中的多态需要满足三个条件,首先类之间应满足赋值兼容规则,其二是要声明虚函数,第三是要由成员函数来调用或者是通过指针、引用来访问虚函数。
三、实验题目
1.将实验3的题目运用多态性进行改进。
2.以下两题选择一题实现(也可以两题都做)
(1)编写一个程序实现图书和杂志销售管理。
当输入一系列图书和杂志销售记录后,将销售良好(图书每月售500本以上,杂志每月售2500本以上)的图书和杂志名称显示出来。
(2)定义一个抽象类CShape,包括纯虚函数Area()(用来计算面积)和SetData(用来重设形状大小)。
然后派生出三角形CTriangle类,矩形CRect类,圆CCircle类,分别求其面积。
最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。
编写一个完整的程序。
四、程序思路
五、程序源代码(要有注释)
六、用户使用说明(输入/输出规定)
七、调试分析运行结果
实验5输入/输出流库(选做)
一、实验目的
1、掌握文件流的打开、关闭及使用的使用方法。
2、理解文本文件流与二进制文件流在操作上的区别。
3、掌握插入和提取运算符的重载。
4、掌握基本流的输入、输出方法。
二、实验题目
1、设计一个管理图书目的简单程序,提供的基本功能包括:
可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。
为简单起见,描述一本书的信息包括:
书号,书名,出版社和作者。
2、自定义一个描述人的基本信息的类,至少包括的数据成员:
姓名,单位,出生日期。
用友元函数重载重载提取和插入运算符,实现对象的输入和输出。
三、程序思路
四、程序源代码(要有注释)
五、用户使用说明(输入/输出规定)
六、调试分析运行结果
实验6Windows程序开发
一、实验目的
1、掌握使用VisualC++开发Windows程序的基本方法
2、理解Windows程序原理。
3、了解MFC类库及MFC应用程序框架。
二、实验知识点概念
1、Windows程序设计是基于事件驱动的程序设计模式。
2、类库是一个可以在应用程序中使用的互相关联的C++类的集合。
与一般类库不同,Microsoft基本类库(MFC)是一个Windows应用程序框架,它定义了应用程序的结构并实现了标准的用户接口。
MFC提供了管理窗口、菜单、对话框的代码,可以实现基本的输入/输出和数据存储。
二、实验题目
1.利用MFC应用程序向导分别生成单文档、多文档、对话框应用程序,观察三种应用程序分别有哪些类组成?
这些类有什么作用,分别继承哪些MFC基类?
2.创建一个单文档工程项目,在该项目中添加一个口令对话框(如图所示),口令为自己设定的一个值,以防止非法用户侵入。
口令对话框
(1)设计思路与步骤
(2)源代码(只写明自己添加的代码)