(4)观察构造函数和析构函数的调用顺序; (5)观察具有不同访问属性的成员的访问方式。
3、实验要求
(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。
(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。
4、实验步骤
(1)添加一个头文件TDate.h来定义TDate类。包含:
1)私有数据成员:年(year)、月(month)、日(day)等;
2)定义2个构造函数,并对其中的一个构造函数设置缺省参数; 3)定义1个析构函数。
4)定义成员函数SetDate来设置日期,AddOneDay来对日期进行加1天的操作,print来输出日期。
(2)添加一个源文件TDate.cpp来实现成员函数。
(3)在主程序中定义若干个TDate类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。写在TDate.cpp文件中或另外一个cpp文件中。
(4)将成员函数print的访问属性设为private或protected后,重新编译,观察编译结果。 //======日期类定义部分TDate.h======// #include
public: TDate() { year=2003;month=1;day=1; cout<<\调用缺省的构造函数\ } TDate(int y,int m=1,int d=1) { year=y;month=m;day=d; cout<<\调用带参数的构造函数\ }; void SetDate(int y,int m,int d); void AddOneDay(); void print(); ~TDate(){cout<<\调用析构函数\private: int year; int month; int day; };
#endif
//======日期类实现部分TDate.cpp ======// #include \int maxDays(int,int); void TDate::print()
{cout<
int maxDays(int y,int m) { int days; switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; //31天 break; case 2: if ((y%4==0&&y0!=0)||y@0==0)//闰年29天 days=29; else days=28; break; //} default://30天 days=30; break; } return days; };
int main() {
TDate d0;
cout<<\不带参数的日期对象:\d0.print(); TDate d1(2003);
cout<<\带1个参数的日期对象:\d1.print(); TDate d2(2003,12);
cout<<\带2个参数的日期对象:\d2.print(); TDate d3(2004,10,14); d3.AddOneDay();
cout<<\带3个参数的日期对象加一天后:\d3.print(); d3.SetDate(2005,4,8);
cout<<\重新设定日期后:\d3.print(); return 0;
}
实验四 静态成员与常成员的使用(2学时)
1、 实验目的
(1)学习静态成员的使用 (2)学习常成员的使用
(3)掌握静态数据成员与常数据成员的初始化
2、实验内容
(1)某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现在要求设计一个Goods类并使用静态成员来模拟商店货物购进和卖出的情况;
(2)为上面的Goods类添加一个常数据成员(货物名称),并对货物名称进行初始化;
(3)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
3、实验要求
(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。
(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。
4、实验步骤
(1)添加一个头文件Goods.h来定义Goods类。包含:
1)私有数据成员货物重量(weight)、私有静态数据成员库存总重量(totalWeight); 2)定义构造函数来描述进货过程;
3)定义成员函数Sell来描述货物卖出过程,成员函数GetWeight来获取当前货物重量。 4)定义静态成员函数GetTotalWeight来读取当前货物的库存总重量。 5)自定义若干个成员函数。
(2)添加一个源文件Goods.cpp来实现成员函数。
(3)在主程序中定义若干个Goods类的对象,模拟进货与卖出的过程。查看运行结果。
(4)为Goods类添加一个常数据成员const char * name来表示货物名称,改写构造函数及主程序的调用,在构造函数的成员初始化列表中对货物名称赋初值。重新编译,观察运行结果。
(5)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
参考程序如下: #include
public:
Goods(int w);
int GetWeight() const; void Sell();
static int GetTotalWeight(); private:
int weight;
static int totalWeight; public: const char* name; };
Goods::Goods(int w):name(\鸡蛋\{
weight=w;
totalWeight+=w; }
void Goods::Sell() { weight=0;
totalWeight-=weight; }
int Goods::GetWeight() const {
return weight; }
int Goods::GetTotalWeight() {
return totalWeight; }
int Goods::totalWeight=0; int main() {
int w; cout<<\购进第1箱货物重量为:\ cin>>w;
Goods g1(w); cout<<\购进第2箱货物重量为:\ cin>>w;
Goods g2(w); cout<<\库存货物重量为:\
cout<