实验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();
}