C++.NET实验(实验三) 下载本文

实验三 类与对象的建立与构造函数

一、实验目的

1、熟悉类定义的一般形式。

2、掌握类中方法的实现形式:在类的内部实现,也可放在类的外部。 3、熟悉类的构造函数的定义。 4、熟悉C++类文件的一般组织结构。

二、实验任务

1、编辑并运行下列程序,熟悉类的定义、类中方法的实现形式和类的应用。

//lab3-1.cpp

#include using namespace std;

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 using namespace std;

void date::showDate()//输出日期 { cout<

date::date()//手动输入年月日 { cin>>year; cin>>month; cin>>day; }

bool date::isLeap() { //?? }

//??需要实现的其它方法 //??

//main.cpp

#include \#include using namespace std;

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 using namespace std;

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; }