实验9 类和对象 【实验目的】 1掌握类的定义方法,正确理解类与结构体的异同 ????2.学习对象的说明和使用方法 ??? 3.掌握定义构造函数、重载构造函数的方法 ????4.理解构造函数的作用 ????5.掌握定义析构函数的方法,理解析构函数的作用 ??? 6.加深理解拷贝构造函数的作用和用途 【实验内容】 ⒈定义一个三角形类。该类的私有成员是三个边长;公有成员函数用于计算三角形 的面积。设计相应的程序测试该类的功能,并将类的定义作为接口,用多文件结 构实现之。 //Triangle.h内容 class Triangle {private: double a,b,c; public: void set(double l1,double l2,double l3); void area(); }; //Triangle.cpp内容 #include <iostream.h> #include <math.h> #include "Triangle.h " void Triangle::set(double l1,double l2,double l3) { a=l1;b=l2;c=l3;} void Triangle::area() { double s; s=(a+b+c)/2; cout<<"Area is:"<<sqrt(s*(s-a)*(s-b)*(s-c))<<endl;} void main() { Triangle S; S.set(3.0,4.0,6.0); S.area(); } ⒉定义一个描述学生通讯录的类: 数据成员包括:姓名、学校、电话号码和邮编; 公有成员函数包括:①一个Print( ) 函数输出所有的数据成员 ②用函数Init(char *,char *,char *,char *)来初始化各成员 ③用函数FreeSpace( )释放数据成员占用的空间 并设计相应的程序测试该类的功能。 #include <iostream.h> #include <string.h> class COMMU { char *pName; //姓名,数据成员为私有的 char *pSchool; //单位 char *pNum; //电话号码 char Box[10]; //邮编 public: void Print(void) //输出数据成员 {cout<<"姓名:"<<pName<<'\t'; cout<<"单位:"<<pSchool<<'\t'; cout<<"电话号码:"<<pNum<<'\t'; cout<<"邮编:"<<Box<<'\n';} void Init(char *,char *,char *,char *); void FreeSpace(void); //释放数据成员占用的空间 }; void COMMU::Init(char *name,char *unit,char *num,char *b) { pName = new char [strlen(name)+1]; strcpy(pName,name); pSchool = new char [strlen(unit)+1]; strcpy(pSchool,unit); pNum = new char [strlen(num)+1]; strcpy(pNum,num); strcpy(Box,b);} void COMMU::FreeSpace(void) {if(pName) delete [] pName; if(pSchool) delete [] pSchool; if(pNum) delete [] pNum;} void main(void ) { COMMU c1,c2; c1.Init("张建国","南京大学","025-85595638","210024"); c2.Init("李国强","南京工业大学","025-85432455","210015"); c1.Print(); c2.Print(); c2.FreeSpace(); c1.FreeSpace(); } ⒉将上题的成员函数Init改为构造函数,且将成员函数FreeSpace改为析构函数。 增加一个缺省的构造函数,使指针pName,pSchool和pNum的初值为0,使Box 包含空字符串。 #include <iostream.h> #include <string.h> class COMMU { char *pName; //姓名,数据成员为私有的 char *pSchool; //单位 char *pNum; //电话号码 char Box[10]; //邮编 public: void Print(void) //输出数据成员 {cout<<"姓名:"<<pName<<'\t'; cout<<"单位:"<<pSchool<<'\t'; cout<<"电话号码:"<<pNum<<'\t'; cout<<"邮编:"<<Box<<'\n';} COMMU(char *,char *,char *,char *); COMMU(); ~COMMU(); }; COMMU :: COMMU() //缺省的构造函数 { pName = pSchool = pNum =0; Box[0] = 0;} COMMU::COMMU(char *name,char *unit,char *num,char *b) { cout<<"调用构造函数来初始化对象"<<endl; pName = new char [strlen(name)+1]; //重载构造函数 strcpy(pName,name); pSchool = new char [strlen(unit)+1]; strcpy(pSchool,unit); pNum = new char [strlen(num)+1]; strcpy(pNum,num); strcpy(Box,b); } COMMU::~COMMU( ) //析构函数 {cout<<"调用析构造函数来释放对象"<<endl; if(pName) delete [] pName; if(pSchool) delete [] pSchool; if(pNum) delete [] pNum; } void main(void ) { COMMU c1("张建国","湛江师范学院","025-85595638","210024"); COMMU c2("李国强","湛江海洋大学","025-85432455","210015"); c1.Print(); c2.Print(); }