资源描述
实验三 类与对象
实验目的
l 掌握类和对象的概念、定义和访问方法
l 掌握不同类型成员的访问限制
l 掌握构造函数和析构函数的使用方法
实验示例
[例3-1] 运用面向对象程序设计方法编写一个程序,计算两个给定长方形的面积,其类中设计一个用于计算两个长方形的总面积成员函数。
解题思路:
设计一个类Rect,包含数据成员len(表示长度)、wid(表示宽度),以及求面积的公有成员函数area()、求两个长方形的总面积成员函数addarea(),并设计两个重载的构造函数。
实现步骤:
1.新建Win32 Console Application程序项目
2.在文件编辑区窗口编写如下程序代码:
#include <iostream.h>
#include <iomanip.h>
class Rect
{
float len,wid;
public:
Rect(){ }; // 默认的构造函数(内联的)
Rect(float,float); // 构造函数
float area(){ return len*wid; }; // 求面积(内联的)
void addarea(Rect,Rect); // 求两个长方形的面积
};
Rect::Rect(float a, float b)
{
len=a; wid=b;
}
void Rect::addarea(Rect r1, Rect r2)
{
cout<<”总面积:”<<r1.len*r1.wid+r2.len*r2.wid<<endl;
}
void main()
{
Rect A(3.5,2.0), B(3.8,2.3), C;
cout<<A.area<<’\t’<<B.area<<endl;
C.addarea;
}
3.编译、链接和执行程序
[例3-2] 编写一个程序,设计一个类score用于统计一个班的平均成绩。
解题思路:
使用2个静态数据成员分别存储总分、人数,另定义一个静态成员函数输出平均成绩。
实现步骤:
1.新建Win32 Console Application程序项目
2.在文件编辑区窗口编写如下程序代码:
#include <iostream.h>
class score
{
int fs;
static int sum;
static int num;
public:
score(int s)
{
fs=s;
sum+=fs;
num++;
}
static void average()
{
if (num==0) cout<<”尚未输入学生成绩!”<<endl;
cout<<”平均成绩:”<<sum/num<<endl;;
}
};
int score::sum=0; // 初始化静态数据成员
int score::num=0;
void main()
{
score *p;
int s;
while (1)
{
cout<<”学生成绩:”; cin>>s;
if (s<0) break; // 输入负数时结束成绩输入
p=new score(s);
delete p;
}
score::average();
}
3.编译、链接和执行程序
实验习题
1.定义一个日期类Date,该类对象存储日期数据,并实现如下操作:
void getdate(); // 输出日期,格式:”2000年1月1日”
int getyear(); // 返回年份
int getmonth(); // 返回月份
int getday(); // 返回日期
void setdate(int y, int m, int d); // 设置日期
2.设计一个雇员类employee,该类对象可存储雇员的姓名、编号、生日等信息,要求使用上一题设计的日期类作为对象成员表示生日。雇员类的使用如:
employee a(“Smith”, “10”, 1978, 11, 25);
// 对象a表示雇员Smith,编号为10,1978年11月25日出生
date Today;
…
if (a.isBirth(Today)) ……. // 判断今天是否为某雇员的生日
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include<iostream.h>
class Date
{
public:
void getdate() // 输出日期,格式:"2000年1月1日"
{
cout<<y<<"年"<<m<<"月"<<d<<"日";
}
int getyear() // 返回年份
{
return y;
}
int getmonth() // 返回月份
{
return m;
}
int getday() // 返回日期
{
return d;
}
void setdate(int y1, int m1, int d1) // 设置日期
{
y=y1;
m=m1;
d=d1;
}
private:
int y,m,d;
};
class employee
{
char name[10];
int num;
Date birth;
public:
void set(char a[10],int b)
{
name[10]=a[10];
num=b;
}
void Birth(int y2,int m2,int d2)
{
birth.setdate(y2,m2,d2);
}
void show()
{
cout<<"编号为"<<num<<"的雇员生日为";
birth.getdate();
cout<<endl;
}
int isBirth(Date a,employee b) // 判断今天是否为某雇员的生日
{
int mn,my,dn,dy;
mn=a.getmonth();
my=b.birth.getmonth();
dn=a.getday();
dy=b.birth.getday();
if(mn==my&&dn==dy)
return 1;
else
return 0;
}
};
int main()
{
Date today;
today.setdate(2014,3,27);
employee f;
f.set("Anna",1);
f.Birth(1992,8,19);
f.show();
cout<<"今天是";
today.getdate();
cout<<endl;
if(f.isBirth(today,f))
cout<<"今天是该雇员的生日。"<<endl;
else
cout<<"今天不是该雇员的生日。"<<endl;
return 0;
}
展开阅读全文