实验二+++类程序设计实验.docx

上传人:b****8 文档编号:10626267 上传时间:2023-02-22 格式:DOCX 页数:20 大小:17.69KB
下载 相关 举报
实验二+++类程序设计实验.docx_第1页
第1页 / 共20页
实验二+++类程序设计实验.docx_第2页
第2页 / 共20页
实验二+++类程序设计实验.docx_第3页
第3页 / 共20页
实验二+++类程序设计实验.docx_第4页
第4页 / 共20页
实验二+++类程序设计实验.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验二+++类程序设计实验.docx

《实验二+++类程序设计实验.docx》由会员分享,可在线阅读,更多相关《实验二+++类程序设计实验.docx(20页珍藏版)》请在冰豆网上搜索。

实验二+++类程序设计实验.docx

实验二+++类程序设计实验

实验二类程序设计实验

【实验目的】

1.掌握类和对象的概念、定义和使用方法。

2.学习数据成员与成员函数的访问方式。

3.掌握构造函数、拷贝构造函数和析构函数的使用方法。

【实验内容】

1.阅读下列程序,写出执行结果:

(1)#include

classCircle

{

public:

Circle(floatradius)

{

Radius=radius;

cout<<"构造函数被调用"<

}

~Circle()

{cout<<"析构函数被调用!

"<

floatGetArea(){return3.14*Radius*Radius;}

private:

floatRadius;

};

intmain()

{

floatradius;

cout<<"请输入圆的半径:

";

cin>>radius;

Circleobj(radius);

cout<<"半径为"<

"<

return(0);

}

(2)#include

classCircle

{

public:

Circle(floatradius)

{

Radius=radius;

cout<<"构造函数被调用"<

}

Circle(Circle&p)

{

Radius=p.Radius;

cout<<"拷贝构造函数被调用"<

}

~Circle()

{cout<<"析构函数被调用!

"<

floatGetArea(){return3.14*Radius*Radius;}

private:

floatRadius;

};

intmain()

{

floatradius;

cout<<"请输入圆的半径:

";

cin>>radius;

Circleobj1(radius);

Circleobj2(obj1);

cout<<"对象1的面积为:

"<

cout<<"对象2的面积为:

"<

return(0);

}

2.设计一个银行账户(Account)类,包含户名、帐号以及当前余额属性,可完成开户、存款、取款和查询余额等行为。

银行账户类的定义如下:

classAccount

{

private:

charmName[20];//银行账户的户名

longmSN;//本账户的帐号

floatmBalance;//本账户当前的余额

public:

Account(charname[],longnum,floatamount);//类的构造函数

~Account();//类的析构函数

voiddeposit(floatamount);//往账户中存款

intwithdraw(floatamount);//从账户中取款

floatgetBalance();//查询余额

};

请根据上述给定的类,完善其相应的构造函数及成员函数的定义,并编写主函数实现测试。

3.设计一个股票(Stock)类,包含股票名称、股票代码、股票的数量、每股的价格、股票的总值等属性,可完成获得股票(用构造函数完成)、增持、卖出股票、更新股票价格、显示所持股票的信息等行为。

(附加题)

4.定义一个复数类。

要求有构造函数、拷贝构造函数和析构函数,并能实现复数的加、减、乘、除等基本运算。

5.改进实验内容2,用类模板形式定义一个复数类,并实现复数的加、减、乘、除等基本运算。

(附加题)

6.设计一个用于学生管理的Student类,属性有:

学号、年龄、性别、出生日期、身份证号等。

其中“出生日期”声明为一个“日期”类的内嵌子对象。

用成员函数实现对学生信息的录入和显示。

要求包括:

构造函数和析构函数、拷贝构造函数、组合。

【思考题】

1.C++语言中类和结构体类型有何异同?

2.什么时候程序会调用其构造函数?

3.什么时候程序会自动调用析构函数?

4.什么时候程序会自动调用拷贝构造函数?

5.类的组合在什么情况下使用?

#include

#include

classAccount

{

private:

charmName[20];//银行账户的户名

longmSN;//本账户的帐号

floatmBalance;//本账户当前的余额

public:

Account(charname[],longnum,floatamount);//类的构造函数

~Account();//类的析构函数

voiddeposit(floatamount);//往账户中存款

voidwithdraw(floatamount);//从账户中取款

floatgetBalance();//查询余额

};

Account:

:

Account(charname[],longnum,floatamount)

{

strcpy(mName,name);

mSN=num;

mBalance=amount;

cout<<"构造函数被调用"<

}

Account:

:

~Account()

{

cout<<"析构函数被调用"<

}

voidAccount:

:

deposit(floatamount)

{

mBalance+=amount;

}

voidAccount:

:

withdraw(floatamount)

{

mBalance-=amount;

}

floatAccount:

:

getBalance()

{

return(mBalance);

}

voidmain()

{

//chara[20];

//longb;

//floatc;

floata1,a2;

Accounts("abc",123,0);

cout<<"请输入存款金额:

"<

cin>>a1;

s.deposit(a1);

cout<<"请输入取款金额:

"<

cin>>a2;

s.withdraw(a2);

cout<<"卡上余额为:

"<

}

#include

#include

classStock

{

public:

Stock(chara[],intb,intc,floatd,floate);//获得股票

voidincrease(inta);//股票增持

voidsale(inta);//卖出股票

voidupdate(floata);//更新股票价格

voiddisplay();//显示

private:

charname[20];//股票名称

intnum;//股票代码

intnumber;//股票数量

floatprice;//每股价格

floatsum;//股票总值

};

//获得股票

Stock:

:

Stock(chara[],intb,intc,floatd,floate)

{

strcpy(name,a);

num=b;

number=c;

price=d;

sum=e;

cout<<"构造函数被调用"<

}

//股票增持

voidStock:

:

increase(inta)

{

number+=a;

sum=number*price;

}

//更新股票价格

voidStock:

:

update(floata)

{

price=a;

sum=number*price;

}

//卖出股票

voidStock:

:

sale(inta)

{

number-=a;

sum=number*price;

}

//显示

voidStock:

:

display()

{

cout<<"股票名称股票代码股票数量每股价格股票总值"<

cout<

}

intmain()

{

Stocks("jihb",3435252,3,5.0,15.0);

s.display();

s.increase(3);

s.display();

s.update(15);

s.display();

s.sale

(1);

s.display();

return(0);

}

#include

#include

#include

classfraction

{

public:

fraction(floatx=0,floaty=0);//构造函数

fraction(fraction&p);//拷贝构造函数

~fraction();//析构函数

floatgeta(void);//得到实部的值

floatgetb(void);//得到虚部的值

voiddisplay(void);//显示

fractionadd(fraction&c);//计算复数之和

fractionsub(fraction&c);//计算复数之差

fractionmul(fraction&c);//计算复数之积

fractiondiv(fraction&c);//计算复数之商

private:

floata;//实部

floatb;//虚部

};

fraction:

:

fraction(floatx,floaty)

{

b=y;

a=x;

cout<<"构造函数被调用"<

}

fraction:

:

fraction(fraction&p)

{

a=p.a;

b=p.b;

cout<<"拷贝函数被调用"<

}

fraction:

:

~fraction()

{

cout<<"析构函数被调用"<

}

floatfraction:

:

geta(void)

{

return(a);

}

floatfraction:

:

getb(void)

{

return(b);

}

//显示

voidfraction:

:

display()

{

cout<

}

//复数之和

fractionfraction:

:

add(fraction&c)

{

fractiontemp;

temp.a=this->a+c.a;

temp.b=this->b+c.b;

//temp.b=b+c.b;

return(temp);

}

//复数之差

fractionfraction:

:

sub(fraction&c)

{

fractiontemp;

temp.a=this->a-c.a;

temp.b=this->b-c.b;

return(temp);

}

//复数之积

fractionfraction:

:

mul(fraction&c)

{

fractiontemp;

temp.a=this->a*c.a-this->b*c.b;

temp.b=this->a*c.b+this->b*c.a;

return(temp);

}

//复数之商

fractionfraction:

:

div(fraction&c)

{

fractiontemp;

if(c.a==0&&c.b==0)

{

cout<<"输入错误"<

exit(0);

//return0;

}

temp.a=(this->a*c.a+this->b*c.b)/(c.a*c.a+c.b*c.b);

temp.b=(this->b*c.a-this->a*c.b)/(c.a*c.a+c.b*c.b);

return(temp);

}

intmain()

{

fractionx(3,4),y(1,2),z;

z=x.add(y);

z.display();

z=x.sub(y);

z.display();

z=x.mul(y);

z.display();

z=x.div(y);

z.display();

return(0);

}

#include

#include

#include

template

classfraction

{

public:

fraction(Tx=1,Ty=1);//构造函数

fraction(fraction&p);//拷贝构造函数

~fraction();//析构函数

Tgeta(void);//得到实部的值

Tgetb(void);//得到虚部的值

voidadd(fractionc);//计算复数之和

voidsub(fractionc);//计算复数之差

voidmul(fractionc);//计算复数之积

voiddiv(fractionc);//计算复数之商

private:

Ta;//实部

Tb;//虚部

};

template

fraction:

:

fraction(Tx,Ty)

{

b=y;

a=x;

cout<<"构造函数被调用"<

}

template

fraction:

:

fraction(fraction&p)

{

a=p.a;

b=p.b;

cout<<"拷贝函数被调用"<

}

template

fraction:

:

~fraction()

{

cout<<"析构函数被调用"<

}

template

Tfraction:

:

geta(void)

{

return(a);

}

template

Tfraction:

:

getb(void)

{

return(b);

}

//复数之和

template

voidfraction:

:

add(fractionc)

{

Ta,b;

b=this->b+c.getb();

a=this->a+c.geta();

cout<

}

//复数之差

template

voidfraction:

:

sub(fractionc)

{

Ta,b;

b=this->b-c.getb();

a=this->a-c.geta();

cout<

}

//复数之积

template

voidfraction:

:

mul(fractionc)

{

Ta,b;

b=this->b*c.geta()+this->a*c.getb();

a=this->a*c.geta()-this->b*c.getb();

cout<

}

//复数之商

template

voidfraction:

:

div(fractionc)

{

Ta,b;

if(c.geta()==0&&c.getb()==0)

{

cout<<"输入错误"<

exit(0);

}

b=(this->b*c.geta()-this->a*c.getb())/(c.geta()*c.geta()+c.getb()*c.getb());

a=(this->a*c.geta()+this->b*c.getb())/(c.geta()*c.geta()+c.getb()*c.getb());

cout<

}

intmain()

{

fractionx(3,4),y(0,0);

x.add(y);

x.sub(y);

x.mul(y);

x.div(y);

return(0);

}

#include

#include

classdate

{

public:

date(inta,intb,intc);

intyear;

intmonth;

intday;

};

classStudent

{

public:

Student(inta,intb,charc,intyear,intmonth,intday,inte);//构造函数

Student(Student&p);//拷贝构造函数

~Student();//析构函数

voidget();//信息录入

voiddisplay(void);//显示

private:

intnum;//学号

intage;//年龄

charsex;//性别

datebirth;//年

ints;//身份证号

};

date:

:

date(inta,intb,intc)

{

year=a;

month=b;

day=c;

}

Student:

:

Student(inta,intb,charc,intyear,intmonth,intday,inte):

birth(year,month,day)

{

num=a;

age=b;

sex=c;

s=e;

cout<<"构造函数被调用"<

}

Student:

:

Student(Student&p):

birth(p.birth)

{

num=p.num;

age=p.age;

sex=p.sex;

s=p.s;

cout<<"拷贝函数被调用"<

}

Student:

:

~Student()

{

cout<<"析构函数被调用"<

}

voidStudent:

:

get()

{

cout<<"请输入学生信息"<

cout<<"学号:

";

cin>>num;

cout<<"年龄:

";

cin>>age;

cout<<"性别:

";

rewind(stdin);

cin>>sex;

cout<<"出生日期<年月日>:

";

cin>>birth.year>>birth.month>>birth.day;

}

voidStudent:

:

display()

{

cout<<"\n学生基本信息"<

cout<<"学号:

"<

cout<<"年龄:

"<

cout<<"性别:

"<

cout<<"出生日期:

"<

}

intmain()

{

Studentz(345,15,'f',1994,8,6,767868);

z.display();

z.get();

z.display();

return(0);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1