实验指导C++面向对象部分Word文件下载.docx
- 文档编号:16314324
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:48
- 大小:97.25KB
实验指导C++面向对象部分Word文件下载.docx
《实验指导C++面向对象部分Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验指导C++面向对象部分Word文件下载.docx(48页珍藏版)》请在冰豆网上搜索。
doublebalance;
//存款余额
intterm;
//存款期限
};
FDAccount:
:
FDAccount(char*ID,char*depositor,doubleamount,intperiod,doublerate)
name=depositor;
accounts=ID;
if((amount<
0||rate<
0))
{
cout<
<
"
数据不正确"
endl;
exit
(1);
}
balance=amount;
term=period;
interest_rate=rate;
}
doubleFDAccount:
fetch(char*ID,char*depositor,doubleamount)
cout<
帐号"
账户名称"
支取金额"
accounts<
"
name<
amount<
balance=balance-amount;
returnbalance;
voidFDAccount:
update()
balance=balance+balance*(interest_rate/100.00)*(term/12.0);
show()
显示账户基本信息:
帐号名称"
期限"
利率"
term<
interest_rate<
目前账户余额为:
balance<
voidmain()
FDAccountdepositor("
0034"
"
王涛"
10078,18,1.98);
depositor.show();
存款已到期!
\n"
depositor.update();
depositor.show();
支取存款:
depositor.fetch("
5000);
实验题2参考程序
classRectangle
Rectangle(inttop,intleft,intbottom,intright);
~Rectangle(){}
intGetTop()const{returnitsTop;
intGetLeft()const{returnitsLeft;
intGetBottom()const{returnitsBottom;
intGetRight()const{returnitsRight;
voidSetTop(inttop){itsTop=top;
voidSetLeft(intleft){itsLeft=left;
voidSetBottom(intbottom){itsBottom=bottom;
voidSetRight(intright){itsRight=right;
intGetArea()const;
intitsTop;
intitsLeft;
intitsBottom;
intitsRight;
Rectangle:
Rectangle(inttop,intleft,intbottom,intright)
itsTop=top;
itsLeft=left;
itsBottom=bottom;
itsRight=right;
intRectangle:
GetArea()const
intWidth=itsRight-itsLeft;
intHeight=itsTop-itsBottom;
return(Width*Height);
intmain()
RectangleMyRectangle(100,20,50,80);
intArea=MyRectangle.GetArea();
Area:
Area<
return0;
实验题3参考程序(浅拷贝情况)
#include<
string.h>
classPerson
public:
Person(char*pName="
noname"
intpid=100)
callconstructor"
strcpy(name,pName);
id=pid;
Person(Person&
p)
callcopyconstructor"
strcpy(name,p.name);
id=p.id;
voidprintinfo()
id<
charname[20];
intid;
{
Personwang("
wang"
);
wang.printinfo();
Personli(wang);
li.printinfo();
实验题3参考程序(深拷贝情况)
Person(char*pname="
name=newchar[strlen(pname)+1];
if(name!
=0)
{strcpy(name,pname);
name=newchar[strlen(p.name)+1];
//name[1]='
z'
;
/*-----------------------------------------------------------------
voidGetAddr()//取对象name成员的内存地址
{
this->
'
saddressis:
;
(int)&
(*this->
name)<
------------------------------------------------------------------*/
~Person(){deletename;
}
101);
//wang.GetAddr();
//li.GetAddr();
【思考题】
1.构造函数可以是私有成员么?
2.为什么同类的不同对象,调用相同的成员函数时,这些成员函数能够准确的操作相应的对象呢?
实验二类与对象基本程序设计
(二)
1.巩固类和对象的定义及使用方法。
2.了解静态成员的概念,特点,定义方式,作用。
3.了解友元的概念,特点,定义方式,作用。
4.掌握组合类的概念,了解组合类对象构造和析构的过程。
实验题1.商店销售某一商品,商店每天公布统一的折扣(discount),同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优待。
现已知当天3个销货员的销售情况为:
销货员号(num)销货件数(quantity)销货单价(price)
101523.5
1021224.56
10310021.5
编写程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价,要求用静态数据成员和静态成员函数。
将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,在定义静态成员函数Average(求平均价)和display(输出结果)
实验题2.定义单链表类,完成单链表的相关操作:
。
(1)显示输出一个已经生成的链表
(2)对一个空表插入链表项,插入的新表被放在链表的头部,即前插入
(3)对一个空表追加链表项,追加的新链表项被放在表尾部
(4)两个链相连接,既将一个链表接在另一个链表的尾部
(5)将一个链表的数据项逆向输出;
(6)求一个链表的数据项数即长度。
classProduct
{public:
Product(intn,intq,floatp):
num(n),quantity(q),price(p){};
voidtotal();
staticfloataverage();
staticvoiddisplay();
private:
intnum;
intquantity;
floatprice;
staticfloatdiscount;
staticfloatsum;
staticintn;
};
voidProduct:
total()
{floatrate=1.0;
if(quantity>
10)rate=0.98*rate;
sum=sum+quantity*price*rate*(1-discount);
n=n+quantity;
display()
{cout<
sum<
average()<
floatProduct:
average()
{return(sum/n);
discount=0.05;
sum=0;
intProduct:
n=0;
ProductProd[3]={
Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5)
for(inti=0;
i<
3;
i++)
Prod[i].total();
Product:
display();
classList;
classItem
friendclassList;
Item(intd=0)//节点类代参数的构造函数
data=d;
next=0;
Item*next;
//指针域
intdata;
//数据域
classList
List(){list=0;
}//链表类的默认构造函数
List(intd){list=newItem(d);
}//链表类带参数的构造函数
intprint();
//打印链表成员函数
intinsert(intd=0);
//向链表中插入节点
intappend(intd=0);
//向链表中增加节点
voidcat(List&
il);
//连接两个链表
voidreverse();
//倒置一个链表
intlength();
//取链表的长度
Item*end();
//取链表指向最后一个节点的指针
Item*list;
intList:
print()
if(list==0)
empty"
return0;
("
intcnt=0;
Item*pt=list;
while(pt)
if(++cnt%40==1&
&
cnt!
=1)
cout<
pt->
data<
pt=pt->
next;
)"
returncnt;
insert(intd)
Item*pt=newItem(d);
pt->
next=list;
list=pt;
returnd;
append(intd)
list=pt;
else
(end())->
next=pt;
Item*List:
end()
Item*prv,*pt;
for(prv=pt=list;
pt;
)
prv=pt;
returnprv;
voidList:
cat(List&
il)
Item*pt=il.list;
append(pt->
data);
reverse()
Item*pt,*prv,*tmp;
prv=0;
pt=list;
list=end();
while(pt!
=list)
tmp=pt->
pt->
next=prv;
pt=tmp;
list->
next=prv;
length()
for(;
pt=pt->
next,cnt++)
;
returncnt;
Listlist1;
list1.print();
for(inti=10;
18;
list1.insert(i);
list1:
Listlist2;
for(i=15;
20;
list2.append(i);
list2:
list2.print();
list1length:
list1.length()<
list2.reverse();
list2length:
list2.length()<
1.看看自己还能给实验题目2添加些什么样的操作?
2.如果用静态成员函数访问非静态数据成员,可以么?
实验三类的继承
1.了解类的继承的概念和按继承方式的继承分类及各种继承方式的特点。
2.了解并掌握派生类对象的构造和析构过程。
3.了解并掌握单继承,多继承的定义方式。
4.了解多继承情况下产生的二义性及解决办法。
5.了解虚基类的定义,原理和用法,了解存在虚基类的情况下,派生类对象的构造和析构过程。
实验题1.定义一个继承与派生关系的类体系,在派生类中访问基类成员。
先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;
以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;
定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。
实验题2.由汽车类派生出轿车类和卡车类,再由轿车类和卡车类多重派生出皮卡类。
所谓皮卡指的是轿车的后备箱改为卡车似的后厢,可以兼运少量货物。
汽车类可以说明为虚基类,以避免在皮卡类中出现两组汽车类的数据,请与未说明为虚基类的情况对比。
iostream>
cmath>
usingnamespacestd;
#definePI3.14159
classPoint{
friendclassLine;
doublex,y;
Point(){x=0;
y=0;
Point(doublexv,doubleyv){x=xv;
y=yv;
doubleArea(){return0;
voidShow(){
x="
x<
'
y="
y<
classCircle:
publicPoint{
doubleradius;
Circle(){x=0;
y=0;
radius=0;
Circle(doublexv,doubleyv,doublevv):
Point(xv,yv){//调用基类构造函数
radius=vv;
Circle(Circle&
cir):
Point(cir){//按赋值兼容规则cir可为Point构造函数的实参
radius=cir.radius;
Circle&
operator=(Circle&
cir){
this->
Point:
operator=(cir);
//在派生类中重载复制赋值操作符有固定的标准格式
return*this;
doubleArea(){
returnPI*radius*radius;
voidShow(){//可以直接访问基类的数据成员
radius="
radius<
classLine{
Pointstart,end;
//对象成员
Line():
start(0,0),end(0,0){}//注意对象成员初始化的方法
Line(doublexv1,doubleyv1,doublexv2,doubleyv2):
start(xv1,yv1),end(xv2,yv2){}
doubleGetLength(){
returnsqrt((start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y));
voidShow(){
startpoint:
start.Show();
endpoint:
end.Show();
intmain(){
Pointpt(0,0);
Circlecl1(100,100,10),cl2(cl1),cl3;
Lineln1(0,0,100,100);
点面积:
pt.Area(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 指导 C+ 面向 对象 部分