}
实验二类与对象
(一)(2课时)
实验目的和要求:
1.掌握类、类的数据成员、类的成员函数的定义方式。
2.理解类成员的访问控制方式。
3.掌握对象的定义和操作对象的方法。
4.理解构造函数和析构函数的定义与执行过程。
5.掌握重载构造函数的方法。
6.了解拷贝构造函数的方法。
预习内容
类(数据成员和成员函数)的定义与访问权限设置;类的构造函数与析构函数的定义与使用。
实验内容:
1、定义一个score类,其中包括私有数据成员和公有成员函数,即
num学号
Math高等数学成绩
English英语成绩
Programming程序设计成绩
Average平均成绩
Inscore()输入学号和各科成绩,并计算平均成绩
showscore()输出学号和各科成绩
使用score类,输入某班n个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。
#include
usingnamespacestd;
structStudentID
{
intnum;//学号较长的话,建议用字符串或者字符数组
//charnum[20];
doublemath;
doubleenglish;
doubleprogramming;
doubleaver_Score;
};
classScore{
private:
StudentIDStud;
public:
voidInscore();
voidshowscore();
};
voidScore:
:
Inscore()
{
cout<<"\n请输入学号,数学成绩,英语成绩和编程成绩"<cin>>Stud.num>>Stud.math>>Stud.english>>Stud.programming;
Stud.aver_Score=(Stud.math+Stud.english+Stud.programming)/3;
}
voidScore:
:
showscore()
{
cout<<"学号:
"<cout<<"数学成绩:
"<cout<<"英语成绩:
"<cout<<"编程成绩:
"<cout<<"平均成绩:
"<}
voidmain()
{
intn;//Studentnum
cout<<"请输入学生人数:
"<cin>>n;
Score*pScore=newScore[n];
cout<<"下面将输入"<"<for(inti=0;i{
pScore->Inscore();
pScore->showscore();
pScore++;
}
}
2、定义日期类型Date。
要求:
(1)包含年月日数据成员;提供默认构造函数、带年月日参数的构造函数、和拷贝构造函数;定义set成员函数可以设置日期(setYear,setMonth,setDay);定义addOneDay成员函数实现日期加一天操作;定义intput成员函数,输入日期信息,输入格式为“YYYY-MM-DD”;定义print成员函数输出对象的日期。
(2)编写一个可运行的完整程序,构造3个日期类型的对象,并输出相应的日期信息。
(3)实现日期类型的对象的加减法运算。
#include
usingnamespacestd;
classDate
{
private:
intm_year;
intm_month;
intm_day;
public:
Date(inty,intm,intd):
m_year(y),m_month(m),m_day(d){}
voidSetDate(inty,intm,intd);
voidDisplay();
voidDateAddOne();
boolIsLeapYear();
intDaysOfMonth(intmonth);
};
voidDate:
:
SetDate(inty,intm,intd)
{
m_year=y;
m_month=m;
m_day=d;
}
voidDate:
:
DateAddOne()
{
if(m_month<12)
{
if(m_day+1>DaysOfMonth(m_month))
{
m_day=1;
m_month=m_month+1;
}
else
m_day++;
}
if(m_month==12)
{
if(m_day+1>31)
{
m_year++;
m_month=1;
m_day=1;
}
else
m_day++;
}
}
boolDate:
:
IsLeapYear()
{
return((m_year%4==0&&m_year%100!
=0)||(m_year%400==0));
}
intDate:
:
DaysOfMonth(intmonth)
{
switch(m_month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
return31;break;
case2:
if(IsLeapYear())
{
return29;
break;
}
else
{
return28;
break;
}
case4:
case6:
case9:
case11:
return30;break;
default:
return0;break;
}
}
voidDate:
:
Display()
{
cout<}
voidmain()
{
Datedate(1998,12,30);
intchoice;
do
{
cout<<"***************"<cout<<"*1--设置日期*"<cout<<"*2--日期加一天*"<cout<<"*3--输出日期*"<cout<<"*4--退出*"<cout<<"***************"<cout<<"请选择:
";
cin>>choice;
switch(choice)
{
case1:
intyear,month,day;
cout<<"输入日期(年,月,日之间用空格隔开):
";
cin>>year>>month>>day;
date.SetDate(year,month,day);
break;
case2:
date.DateAddOne();
break;
case3:
date.Display();
break;
case4:
exit(0);
default:
break;
}
}while(choice!
=4);
}
3、定义一个类Stock,记录一支股票交易的基本信息,信息包括交易日序号(表示本月的第几个交易日,用整数表示)、当日最高价、当日最低价、当日开盘价和当日收盘价。
尽量发挥想像力,为该类设计成员函数。
//stock.h
#ifndefSTOCK_H_
#defineSTOCK_H_
classStock{
private:
intnum;
inttodaymax;
inttodaymin;
inttodayopen;
inttodayclose;
public:
voidsetnum(intn);
voidsettodaymax(intmax);
voidsettodaymin(intmin);
voidsettodayopen(intopen);
voidsettodayclose(intclose);
intgettodaymax();
intgettodaymin();
voidgettodayopen();
voidgettodayclose();
voidgetnum();
Stock(intn,intmax,intmin,intopen,intclose);
Stock();
};
#endif
//stock.cpp
#include
usingnamespacestd;
#include"stock.h";
voidStock:
:
setnum(intn)
{
num=n;
}
voidStock:
:
settodaymax(intmax)
{
todaymax=max;
}
voidStock:
:
settodaymin(intmin)
{
todaymin=min;
}
voidStock:
:
settodayopen(intopen)
{
todayopen=open;
}
voidStock:
:
settodayclose(intclose)
{
todayclose=close;
}
intStock:
:
gettodaymax()
{
cout<<"todaymax:
"<returntodaymax;
}
intStock:
:
gettodaymin()
{
cout<<"todaymin:
"<returntodaymin;
}
voidStock:
:
gettodayopen()
{
cout<<"todayopen:
"<}
voidStock:
:
gettodayclose()
{
cout<<"todayclose:
"<}
voidStock:
:
getnum()
{
cout<<"num:
"<}
Stock:
:
Stock(intn,intmax,intmin,intopen,intclose)
{
num=n;
todaymax=max;
todaymin=min;
todayopen=open;
todayclose=close;
}
Stock:
:
Stock()
{
num=0;
todaymax=0;
todaymin=0;
todayopen=0;
todayclose=0;
}
//mian.cpp
#include
usingnamespacestd;
#include"stock.h"
intmain()
{
Stocktoday;
today.setnum(000);
today.settodaymax(1200);
today.getnum();
today.gettodaymax();
return0;
}
4、在主函数中建立两个股票对象,分别存储该股票昨天和今天两天的信息,以当日收盘价计算该股票今天的涨幅。
#include
classStock
{public:
Stock(intn,doublema,doublemi,doubleb,doublee);
voidSet_Stock(intn,doublema,doublemi,doubleb,doublee);
doubleGet_End();
voidShow_Stock();
private:
intNumber;
doubleMax,Min,Begin,End;};
Stock:
:
Stock(intn,doublema,doublemi,doubleb,doublee)
{Number=n;
Max=ma;
Min=mi;
Begin=b;
End=e;}
voidStock:
:
Set_Stock(intn,doublema,doublemi,doubleb,doublee)
{Number=n;
Max=ma;
Min=mi;
Begin=b;
End=e;}
doubleStock:
:
Get_End()
{returnEnd;}
voidStock:
:
Show_Stock()
{cout<cout<cout<cout<cout<voidmain()
{Stocks1(1,4.18,4.00,4.0