}
private:
intx,y;
};
(2)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。
编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。
(本题目主要练习静态数据成员的使用,定义私有变量存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对象完成初始化的功能和删除对象时,从总重量和总价钱中减去对象的重量和价格)
//Menu.h
#ifndefMENU_H
#defineMENU_H
classMenu
{public:
intshow();
};
#endif;
//Carlo.h
classCarlo
{public:
Carlo(doubleWeight=0,doublePrice=0);
virtual~Carlo();
voidSetCarlo(double=0,double=0);
constdouble&GetCurrentTotalWeight()const;
constdouble&GetCurrentTotalPrice()const;
voidBuyBox();
voidSellBox();
voidShowBoxInfor()const;
protected:
staticdoubleTotalWeight;
staticdoubleTotalPrice;
private:
doubleBoxWeight;
doubleBoxPrice;
};
//Carlo.cpp
#include
#include"Carlo.h"
usingnamespacestd;
doubleCarlo:
:
TotalPrice=0.0;
doubleCarlo:
:
TotalWeight=0.0;
Carlo:
:
Carlo(doubleWeight,doublePrice)
{
}
voidCarlo:
:
BuyBox()
{
}
constdouble&Carlo:
:
GetCurrentTotalPrice()const
{returnTotalPrice;
}
constdouble&Carlo:
:
GetCurrentTotalWeight()const
{returnTotalWeight;
}
voidCarlo:
:
SetCarlo(doubleWeight,doublePrice)
{
}
voidCarlo:
:
SellBox()
{
}
voidCarlo:
:
ShowBoxInfor()const
{
}
Carlo:
:
~Carlo()
{
}
//Menu.cpp
#include
#include
#include"Menu.h"
usingnamespacestd;
intMenu:
:
show()
{
}
//CarloDemo.cpp
#include
#include"Menu.h"
#include"Carlo.h"
usingnamespacestd;
voidmain()
{
}
南昌航空大学实验报告
二00七年月日
课程名称:
面向对象程序设计实验名称:
构造函数与析构函数
班级:
XXXXXXX学生姓名:
XXXXXX学号:
指导教师评定:
XX签名:
XXXXX
1、实验目的
·理解类与对象的区别。
·学习掌握定义构造函数与析构函数的方法。
·学习把握默认构造函数的意义。
·了解类成员初始化,掌握构造与析构类成员的方式。
2、实验内容
(1)
创建一个Employee类,该类中用字符数组存放Employee的信息,如姓名、地址、市、省、及邮政编码;每个成员函数的定义放在类定义之外;成员函数包括改变姓名数据成员等;构造函数完成成员数据的初始化;用Display()函数将完整的对象数据打印出来;其中数据成员是保护的,成员函数是公共的。
#include
#include
#include
usingnamespacestd;
classEmployee
{
public:
Employee(charn[20],chara[50],chars[20],charsh[20],charp[6]);
voidChangeName(charch_name[20]);
voidDisplay();
protected:
charname[20];
charaddress[50];
charshi[20];
charsheng[20];
charpost[6];
};
(2)设计一个表示矩形的类Rect,其矩形成员长float*Length,宽float*Width为指针变量,设计相应成员函数,实现下列功能:
①构造函数设置长和宽(默认为1)。
②复制构造函数用老对象生成新对象。
③set()函数设置长和宽(默认为0)。
④计算并返回长方形的周长。
⑤计算并返回长方形的面积。
⑥析构函数释放动态分配的长和宽。
编制主程序应用指针建立对象测试类。
#include
classRect{
float*Length,*Width;
public:
Rect(floata=1,floatb=1);
Rect(Rect&);
voidset(floata=0,floatb=0);
floatperi();
floatarea();
~Rect(){deleteLength;deleteWidth;}
};
南昌航空大学实验报告
二00七年月日
课程名称:
面向对象程序设计实验名称:
继承与多态性
班级:
XXXXXXX学生姓名:
XXXXXX学号:
指导教师评定:
XX签名:
XXXXX
1、实验目的
了解类的两种使用方式
学习从现有类派生出新类的方式
了解在派生类中如何使用基类的成员
了解基类成员在派生类中的访问控制
了解虚函数对多态性的支持
2、实验内容
题目:
应用多态设计学生类
生成表示学生的类XS,提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄,并将他们全部定义为纯虚函数;生成CZS类表示初中生,包含数据成员xm、xb和nl表示学生的姓名、性别和年龄,提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄;再生成类GZS表示高中生和类DXS表示大学生,同样包含相同含义的数据成员xm、xb和nl,也包括成员函数dispXM()、dispXB()和dispNL()。
实验要求
①设计和实现基类XS。
②设计和实现派生类CZS、GZS、DXS。
③分别生成CZS、GZS、DXS类的对象。
④将CZS、GZS、DXS类对象的地址赋给XS类的指针变量。
⑤分别用XS类的指针和引用访问dispXM()、dispXB()和dispNL()函数。
⑥观察程序结果。
#include
#include
usingnamespacestd;
//设计抽象类(XS)表示学生类,定义其中dispXM(),dispXB(),dispNL()三个函数为纯虚函数
classXS{
public:
virtualvoiddispXM()=0;
virtualvoiddispXB()=0;
virtualvoiddispNL()=0;
};
/*定义CZS类,使其继承XS类,包含三个数据成员xm(4个以内汉字,默认名为"张三"),
xb(int型,1表示男,0表示女,默认为1),nl(int型,默认为14);定义构造函数,
初始化各数据成员.另:
实现基类的三个纯虚函数,显示各数据成员.
*/
classCZS:
publicXS{
public:
CZS(char*m="张三",intb=1,intn=14);
voiddispXM();
voiddispXB();
voiddispNL();
protected:
charxm[9];
intxb,nl;
};
//仿照上面的写法,定义高中生类(GZS)和大学生类(DXS)
classGZS:
publicXS{
public:
GZS(char*m="张三",intb=1,intn=17);
voiddispXM();
voiddispXB();
voiddispNL();
protected:
charxm[9];
intxb,nl;
};
classDXS:
publicXS{
public:
DXS(char*m="张三",intb=1,intn=20);
voiddispXM();
voiddispXB();
voiddispNL();
protected:
charxm[9];
intxb,nl;
};
//主函数
voidmain()
{
CZSczs("赵一",1,12);
GZSgzs("钱二",0,15);
DXSdxs("孙三",1,18);
XS*p;//定义抽象基类的指针变量p
p=&czs;//将初中生对象czs的地址赋给p
displayP(p);
p=&gzs;//将高中生对象czs的地址赋给p
displayP(p);
p=&dxs;//将大学生对象czs的地址赋给p
displayP(p);
cout<<"\n----------------------------------------\n";
XS&r1=czs;//定义抽象基类的引用变量r1为czs的别名
displayR(r1);
XS&r2=gzs;//定义抽象基类的引用变量r2为czs的别名
displayR(r2);
XS&r3=dxs;//定义抽象基类的引用变量r3为czs的别名
displayR(r3);
cout<<"\n----------------------------------------\n";
}
南昌航空大学实验报告
二00七年月日
课程名称:
面向对象程序设计实验名称:
运算符重载
班级:
XXXXXXX学生姓名:
XXXXXX学号:
指导教师评定:
XX签名:
XXXXX
1、实验目的
·学习掌握重定义与类有关的运算符。
·把握重载运算符的时机。
·学习掌握把一个类对象转换为另一个类对象。
·学习掌握重载为成员与友元的区别及其带参数的情况。
·学习掌握值返回与引用返回的区别及应用时机。
2、实验内容
(1)
生成一个表示复数的类FS。
复数的实部sb和虚部xb作为其数据成员。
提供成员函数disp()显示复数(格式:
-3+5i或6-2i),重载“+”、“-”为FS类的成员函数,用来计算两个复数的和、差。
思路导航:
①定义类,设计构造函数和显示函数print();
②重载运算符“+”、“-”为类FS的成员函数。
③实例化FS类的2个对象,并利用重载的运算符对其进行计算。
另外,根据上述定义,试将上述的运算符重载成员函数改写成友元函数。
#include
usingnamespacestd;
classFS{
doublesb,xb;
public:
FS(doublea=0,doubleb=0);
FS&operator+(FS&);
FS&operator-(FS&);
voidprint();
};
voidmain()//主函数
{
FSa(-8,3),b(7,-4);
FSc1;c1=a+b;
a.print();cout<<"+";b.print();cout<<"=";c1.print();
cout<FSc2;c2=a-b;
a.print();cout<<"-";b.print();cout<<"=";c2.print();
cout<}
//运算符重载为友元函数
#include
usingnamespacestd;
classFS{
doublesb,xb;
public:
FS(doublea=0,doubleb=0);
friendFSoperator+(FS&,FS&);
friendFSoperator-(FS&,FS&);
voidprint();
};
voidmain()//主函数
{
FSa(8,3),b(7,-14);
FSc1;c1=a+b;
a.print();cout<<"+";b.print();cout<<"=";c1.print();
cout<FSc2;c2=a-b;
a.print();cout<<"-";b.print();cout<<"=";c2.print();
cout<}
(2)
编写一个时间类,实现时间的加、减、读和输出:
//class.h
classTime
{
public:
Time(){}
voidSetTime();
voidDisplay();
Timeoperator+(Time&a);
Timeoperator-(Time&a);
private:
inthour,minute,second;
};
//function.cpp
#include
#include"class.h"
voidTime:
:
SetTime()
{
}
voidTime:
:
Display()
{
cout<"<"<}
TimeTime:
:
operator+(Time&a)
{
}
TimeTime:
:
operator-(Time&a)
{
}
//overload.cpp
#include
#include"class.h"
usingnamespacestd;
voidmain()
{
Timea,b,c;
cout<<"请输入A的时间:
"<a.SetTime();
cout<<"请输入B的时间:
"<b.SetTime();
cout<<"A的时间为:
";
a.Display();
cout<<"B的时间为:
";
b.Display();
cout<<"c=a+b=";
c=a+b;
c.Display();
cout<c=a-b;
c.Display();
}
南昌航空大学实验报告
二00七年月日
课程名称:
面向对象程序设计实验名称:
动态链接库的制作与调用
班级:
XXXXXXX学生姓名:
XXXXXX学号:
指导教师评定:
XX签名:
XXXXX
一用所学的内容编写一个动态链接库的文件
1、实验目的
(1)了解和掌握类和指向函数的指针的使用。
(2)了解和掌握宏的使用,
(3)掌握动态链接库文件创建的过程。
2、实验要求
熟练掌握动态链接库文件的创建
3、实验步骤与内容
题目:
创建一个动态链接库,实现画一棵树。
1).启动VisualC++6.0或者C++Builder5.0
.在WINDOWS98或WINDOWS2000环境下,找到VisualC++6.0或者C++Builder5.0图标,双击之。
为了不使VisualC++6.0或者C++Builder5.0的默认搜索路径与WINDOWS其他软件相冲突,清修改VisualC++6.0或者C++Builder5.0图标的属性。
在属性|程序|批处理一栏中填上你自己的批处理程序名。
以便启动时,首先运行你的批处理程序。
然后在该批处理程序中,写上path=...路径。
2).设置用户程序子目录
设置用户程序子目录的目的是,将所有编程时产生的中间文件和最终执行程序文件全部
放在自己的目录中,以便管理。
3).创建和输入程序
VisualC++6.0启动后,要先建立一个project工程文件。
方法为:
·选择File|new菜单项,将弹出New对话框。
·单击Projects选项卡
·在Location中填用户子目录路径
·在Projectname中填入工程名(如MyDll)
·在列表中选择MFCAppWizard(dll),表示你编制的应用程序将生成动态链接库文件(.dll)
·按照提示创建一个自己想要的工程
✧定位到mydll.h文件处,添加动态链接库的函数原型声明,下面为mydll.h的内容:
//MyDll.h:
mainheaderfilefortheMYDLLDLL
#include"resource.h"//mainsymbols
/////////////////////////////////////////////////////////////////////////////
//CMyDllApp
//SeeMyDll.cppfortheimplementationofthisclass
//
intDrawTree(CPaintDC*dc,intxStart,intyStart,doublelength,doubleangle,intnum);
classCMyDllApp:
publicCWinApp
{
public:
CMyDllApp();
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMyDllApp)
public:
virtualBOOLInitInstance();
//}}AFX_VIRTUAL