实验三 类与对象的建立与构造函数
一、实验目的
1、熟悉类定义的一般形式。
2、掌握类中方法的实现形式:在类的内部实现,也可放在类的外部。 3、熟悉类的构造函数的定义。 4、熟悉C++类文件的一般组织结构。
二、实验任务
1、编辑并运行下列程序,熟悉类的定义、类中方法的实现形式和类的应用。
//lab3-1.cpp
#include
class date //类date的定义 {
private: int year, month,day;//分别表示年月日 public: void setDate(int y,int m,int d);//y,m,d分别代表年月日 void showDate()//输出日期,实现放在类中 { cout< };//类定义结束 //类的方法实现放在类的外部 void date::setDate(int y, int m, int d) { year=y; month=m; day=d; } //主函数 int main() { date d1; d1.setDate(2013,10,1); d1.showDate(); return 0; } 2、创建date类,保存为date.h,在date.cpp中实现该类的一些方法,并在main.cpp文件中调用该类。 依次创建这三个文件,文件内容如下,其中date.cpp部分内容需要补全。文件date.h在“解决方案资源管理器”的“头文件”文件夹中创建,其它两个文件在“源文件”文件夹中创建。 //date.h class date { private: int year, month,day; public: date(char *str); //输入字符串2013-10-01 }; date(int y,int m,int d);//y,m,d分别代表年月日 date(); //手动输入年月日 bool leap( ); //判断是否为闰年 int days(); //判断当前日期为该年的第几天,如2013-03-11为第70天 void showDate();//输出日期 //date.cpp #include \#include void date::showDate()//输出日期 { cout< date::date()//手动输入年月日 { cin>>year; cin>>month; cin>>day; } bool date::isLeap() { //?? } //??需要实现的其它方法 //?? //main.cpp #include \#include int main() { date date1(2013,10,1); date1.showDate(); if(date1.isLeap()) cout<<\是闰年\ else cout<<\非闰年\ cout<<\第\天\ date date2(\ date2.showDate(); date date3; date3.showDate(); return 0; } 3、在第2题的基础上 #if !defined _DATE_H #define _DATE_H (1) 先将下面两行代码加到date.h的开头: 然后将代码:#endif 加到date.h的末尾。 (2) 找到date.cpp或main.cpp文件中的预编译指令:#include \, 将该指令复制多份,保存文件,编译并运行,观察是否导致编译错误。然后,将date.h中开头和结尾处刚刚添加的三行代码删除,再次编译并运行,观察是否有编译错误,体会一下在头文件中添加这三行代码的作用。 4、教材【例4-3】 5、编辑并运行下列程序,理解构造函数和析构函数在何时被自动调用。 //createanddestroy.h #if !defined _CREATEANDDESTORY_H #define _CREATEANDDESTORY_H #include class CreateAndDestroy { public: CreateAndDestroy(int n) { no = n; cout<<\ } ~CreateAndDestroy() { cout<<\private: int no; }; #endif //lab3-5.cpp #include \ CreateAndDestroy one(1); //定义全局对象one int main() { CreateAndDestroy *ptr; CreateAndDestroy two(2); //定义局部动态对象two { CreateAndDestroy three(3);//局部对象three ptr = new CreateAndDestroy(4); //动态对象 static CreateAndDestroy five(5); //静态对象 } delete ptr; //释放动态创建的对象 return 0; }