《面向对象程序设计》实验指导书.docx
《《面向对象程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》实验指导书.docx(16页珍藏版)》请在冰豆网上搜索。
《面向对象程序设计》实验指导书
《面向对象程序设计》实验指导书
实验1熟悉VC开发环境,函数重载
实验目的:
熟悉VC开发环境,掌握函数重载
实验内容:
1建立如图界面
2编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现,数据定义如下
inta[]={1,3,2,5,6,9,0,6};//定义a
floatb[]={1.6,3.3,2.8,5.6,6.8,9.6,0.6,6.8};//定义b
doublec[]={1.2,3.1,2.6,5.8,6.8,9.8,0.8,6.2};//定义c
3.点击运行按钮排序,并用编辑框输出结果
参考程序
voidCFirstvcDlg:
:
OnRun()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringmessage;
CEdit*pEdit;
pEdit=(CEdit*)this->GetDlgItem(IDC_MES);//找到编辑框空间
pEdit->SetSel(0,-1);//先清屏
pEdit->Clear();
inti=0;
for(i=0;i<100;i++)
{
message.Format("第%d个数\r\n",i);//打印结果
pEdit->SetSel(-1,-1);//自动卷屏到底端
pEdit->ReplaceSel(message);
}
}
实验2类和对象
实验目的:
熟悉C++类的定义和对象生成,掌握函数重载,掌握类、类的成员函数、类的成员函数的定义方式。
理解类成员的访问控制方式。
掌握对象的定义和操作对象的方法。
理解构造函数和析构函数的定义与执行过程。
掌握重载构造函数的方法。
实验内容:
编写设计一个People(人)类。
该类的数据成员有姓名(name)、年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatting)、运动(Sporting)、显示(Show)和显示人数(ShowNum)。
其中构造函数由已知参数姓名(nm)、年龄(a)、身高(h)和体重(w)构造对象,进食函数使体重加1,运动函数使身高加1,显示函数用于显示人的姓名、年龄、身高、体重,显示人数函数为静态成员函数,用于显示人数。
假设年龄的单位为岁,身高的单位为厘米,体重的单位为市斤,要求所有数据成员为private访问权限,所有成员函数为public访问权限,在主函数中定义若干个对象,通过对象直接访问类的所有非静态成员函数,通过类访问静态成员函数。
在如下界面中显示信息
参考程序:
#include//编译预处理命令
usingnamespacestd;//使用命名空间std
classPeople
{
private:
//数据成员
charname[9];//姓名
intage;//年龄
intheight;//身高
doubleweight;//体重
staticintnum;//人数
public:
//公有函数
People(charnm[]="路人甲",inta=16,inth=168,intw=118):
age(a),height(h),weight(w){strcpy(name,nm);num++;}voidEatting(){weight++;}//进食
voidSporting(){height++;}//运动
voidShow()const//显示信息
{
cout<<"个人信息:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"身高:
"<cout<<"体重:
"<}
staticvoidShowNum()//显示人数
{cout<<"人数:
"<};
intPeople:
:
num=0;//初始化静态数据成员num
intmain()//主函数main()
{
Peoplep1;//定义对象
p1.Show();//显示信息
Peoplep2("李敏",18,170,108);//定义对象
p2.Eatting();//进食
p2.Sporting();//运动
p2.Show();//显示信息
People:
:
ShowNum();//显示人数
system("PAUSE");//调用库函数system(),输出提示信息
return0;//返回值,返回操作系统
}
实验3模板
实验目的:
掌握类模板与函数模板掌握模板类和模板函数的定义。
实验内容:
编写一个使用数组类模板Array对数组求最大值和求元素和的程序,要求编写出测试程序。
参考程序:
#include//编译预处理命令
usingnamespacestd;//使用命名空间std
//声明数组类模板
template
classArray
{
private:
//数据成员
ElemType*elem;//存储数据元素值
intsize;//数组元素个数
public:
//公有函数
Array(intsz):
size(sz){elem=newElemType[size];}//构造函数
~Array(){deleteelem;}//析构函数
voidSetElem(ElemTypee,inti);//设置元素值
ElemTypeGetElem(inti)const;//求元素值
ElemTypeMax()const;//求最大值
ElemTypeSum()const;//求元素之和
};
template
voidArray:
:
SetElem(ElemTypee,inti)//设置元素值
{
if(i<0||i>=size)
{
cout<<"元素位置错!
"<exit
(1);//退出程序的运行,返回到操作系统
}
elem[i]=e;//设置元素值为e
}
template
ElemTypeArray:
:
GetElem(inti)const//求元素值
{
if(i<0||i>=size)
{
cout<<"元素位置错!
"<exit
(2);//退出程序的运行,返回到操作系统
}
returnelem[i];//返回元素值elem[i]
}
intmain()//主函数main()
{
inta[]={1,9,7,5,6,3};//定义数组a
intn=6;//数组元素个数
Arrayobj(n);//定义数组对象
inti;//定义变量
for(i=0;iobj.SetElem(a[i],i);//设置数组元素值
for(i=0;icout<cout<cout<<"最大值为:
"<cout<<"各元素和为:
"<system("PAUSE");//调用库函数system(),输出系统提示信息
return0;//返回值,返回操作系统
}
实验4派生与继承
实验目的:
理解类的继承的概念,能够定义和使用类的继承关系。
掌握派生类的声明与定义方法。
熟悉公有派生类和私有派生类的访问特性。
学习虚基类在解决二义性问题中的作用。
实验内容:
编程实现:
有一个汽车类Vehicle,它具有一个需传递参数的构造函数,还拥有保护数据成员车轮个数wheels和车重weight。
小汽车类Car是Vehicle的私有派生类,其中包含载人数passengerLoad。
卡车类Truck是Vehicle的私有派生类,其中包含载人数passengerLoad和载重量payload。
每个类都有相关数据的输出函数Show()。
参考程序:
#include//编译预处理命令
usingnamespacestd;//使用命名空间std
//声明汽车类
classVehicle
{
protected:
//保护成员
intwheel;//车轮个数
doubleweight;//车重
public:
//公有函数
Vehicle(intwh=4,doublewt=1000):
wheel(wh),weight(wt){}
voidShow()const//输出相关信息
{
cout<<"车轮个数:
"<cout<<"车重:
"<}
};
//声明小汽车类
classCar:
privateVehicle
{
private:
//私有成员
intpassengerLoad;//载人数
public:
//公有函数
Car(intwh=4,doublewt=1000,intp=5):
Vehicle(wh,wt),passengerLoad(p){}//构造函数
voidShow()const//输出相关信息
{
Vehicle:
:
Show();//调用基类的Show()
cout<<"载人数:
"<}
};
//声明卡车类
classTruck:
privateVehicle
{
private:
//私有成员
intpassengerLoad;//载人数
doublepayload;//载重量
public:
//公有函数
Truck(intwh=4,doublewt=1000,intp=5,doublepay=2000):
Vehicle(wh,wt),passengerLoad(p),payload(pay){}
voidShow()const//输出相关信息
{
Vehicle:
:
Show();//调用基类的Show()
cout<<"载人数:
"<cout<<"载重量:
"<}
};
intmain()//主函数main()
{
Vehiclev;//定义对象
cout<<"汽车信息:
"<v.Show();//输出信息
Carc;//定义对象
cout<"<c.Show();//输出信息
Truckt;//定义对象
cout<"<t.Show();//输出信息
system("PAUSE");//调用库函数system(),输出系统提示信息
return0;//返回值,返回操作系统
}
实验5多态性
实验目的:
理解静态和动态多态性。
掌握运算符重载的基本方法。
掌握虚函数的定义与使用方法。
实验内容:
编写程序,定义抽象基类Shape(形状),由它派生出2个派生类:
Circle(圆形)和Square(正方形),用函数ShowArea()分别显示各种图形的面积,最后还要显示所有图形的总面积。
要求用基类指针数组,数组的每个元素指向一个派生类对象。
参考程序:
#include//编译预处理命令
usingnamespacestd;//使用命名空间std
constdoublePI=3.1415926;//常量PI
constintNUM=2;//常量NUM
//声明形状抽象类
classShape
{
public:
//公有成员:
virtual~Shape(){}//虚析构函数
virtualvoidShowArea()const=0;//纯虚函数,显示面积
};
//声明矩形类
classRectangle:
publicShape
{
private:
//数据成员:
doubleheight;//高
doublewidth;//宽
public:
//公有函数:
Rectangle(doubleh,doublew):
height(h),width(w){}//构造函数
voidShowArea()const//显示面积
{
cout<<"矩形面积:
"<}
};
//声明圆形类
classCircle:
publicShape
{
private:
//数据成员:
doubleradius;//半径
public:
//公有函数:
Circle(doubler):
radius(r){}//构造函数
voidShowArea()const//显示面积
{
cout<<"圆面积:
"<}
};
intmain()//主函数main()
{
Shape*a[NUM];//抽象基类Shape指针数组
inti,select;//定义整型变量
for(i=0;i{//依次产生各个图形
cout<<"输入图形类型(1:
矩形,2:
圆形):
";//输入提示
cin>>select;//输入选择
while(select<1||select>2)
{
cout<<"重新输入图形类型(1:
矩形,2:
圆形):
";
cin>>select;//输入选择
}
if(select==1)
{
doubleh;//高
doublew;//宽
cout<<"高:
";//输入提示
cin>>h;//输入高
cout<<"宽:
";//输入提示
cin>>w;//输入宽
a[i]=newRectangle(h,w);//a[i]指向矩形对象
}
else
{
doubler;//半径
cout<<"半径:
";//输入提示
cin>>r;//输入半径
a[i]=newCircle(r);//a[i]指向圆对象
}
}
for(i=0;i{//依次显示面积及释放临时对象
a[i]->ShowArea();//显示面积
deletea[i];//释放临时对象
}
system("PAUSE");//调用库函数system(),输出系统提示
return0;//返回值,返回操作系统
}
实验6文件操作
实验目的:
掌握文件操作的基本技巧,文件的建立,打开,定位,读写和关闭
实验内容:
有一个整型数组,含10个整数,将这些数据存入到一个二进制文件中,然后再从这个文件中读出这些数据并显示在屏幕上。
intmain(void)//主函数main()
{
inta[]={1,5,78,90,25,16,18,86,91,10},n=10,x;
fstreamf;//定义文件对象
f.open("my_file.dat",ios:
:
out|ios:
:
binary);//以输出方式打开文件
if(f.fail())
{//打开文件失败
cout<<"打开文件失败!
"<exit
(1);//退出程序
}
for(inti=0;if.write((char*)&a[i],sizeof(int));//写数据到文件中
f.close();//关闭文件
f.open("my_file.dat",ios:
:
in|ios:
:
binary);//以输入方式打开文件
if(f.fail())
{//打开文件失败
cout<<"打开文件失败!
"<exit
(2);//退出程序
}
f.read((char*)&x,sizeof(int));//从文件中读出数据到x
while(!
f.eof())
{
cout<f.read((char*)&x,sizeof(int));//从文件中读出数据到x
}
cout<f.close();//关闭文件
system("PAUSE");//输出系统提示并返回操作系统
return0;//返回值0,返回操作系统
}
实验7基于对话框程序设计
实验目的:
掌握基于MFC程序设计基本技巧,掌握基本控件的
实验内容:
设计一个加法器,主要要求如下
2要求输入密码:
3主程序界面如下:
实验8基于单文档程序设计
实验目的:
掌握单文档程序的基本架构,掌握菜单项的添加,成员函数的定义
实验内容:
建立单文档程序,要求如下,启动界面如下
1建立如下启动界面,保持2秒:
2建立菜单:
计算器,调用计算器程序
3建立如下界面,
点击添加人员信息,则弹出如下对话框
输入信息后,在编辑框中显示