有一个类定义如下:
class CContry
{
private:
char *name; // 国家名称
char *caption; // 首都名称
double area; // 国家面积,单位万平方公里
double person_num; // 人口数量,单位 万
public:
CContry() // 无参构造函数
{
name = new char[100];
strcpy(name, "中国");
caption = new char[100];
strcpy(name, "北京");
area = 960;
person_num = 130000.00;
}
CContry(const CContry&); // 拷贝构造函数
CContry(char*, char* , double, double); // 带参数的构造函数
CContry& operator=(const CContry&);
~CContry(); // 析构函数
void set(char*,char*, double, double); // 设置属性的成员函数
void print()const; // 在屏幕上输出CContry对象的信息
};
按要求完善类的定义:
(1) 完成类的所有成员函数定义
(2) 输出函数的输出格式如下:
a) 国家名称:
b) 首都名称:
c) 面积:
d) 人口数量:
(3) 在析构函数中输出如下信息:
a) “国家”对象被析构了!
b) 在输出时,a中的”国家”用对象的name属性值替换
(4) 自己提供类的完整测试程序,要求界面友好,输出结果应该有相应的提示信息。
(5) 要求在测试程序中new一个国家对象,并设置该对象的属性如下:
a) 国家名称: 日本
b) 首都名称: 东京
c) 面积: 37.835
d) 人口数量:12665.9683
(6) 要求在测试程序中delete日本对象
/*=============================================================================
*作业:E20
*功能:(1) 完成类的所有成员函数定义
(2) 输出函数的输出格式如下:
a) 国家名称:
b) 首都名称:
c) 面积:
d) 人口数量
(3) 在析构函数中输出如下信息:
a) “国家”对象被析构了!
b) 在输出时,a中的”国家”用对象的name属性值替换
(4) 自己提供类的完整测试程序,要求界面友好,输出结果应该有相应的提示信息。
(5) 要求在测试程序中new一个国家对象,并设置该对象的属性如下:
a) 国家名称:日本
b) 首都名称:东京
c) 面积:37.835
d) 人口数量:12665.9683
(6) 要求在测试程序中delete日本对象
*作者:
*时间:2015.5.23
*==========================================================================*/
#include<iostream>
using namespace std;
class CContry
{
private:
char *name; //国家名称
char *caption; //首都名称
double area; //国家面积,单位万平方公里
double person_num; //人口数量,单位万
public:
CContry() //无参构造函数
{
name=new char[100];
strcpy(name,"中国");
caption=new char[100];
strcpy(caption,"北京");
area=960;
person_num=130000.00;
}
CContry(const CContry&); //拷贝构造函数
CContry(char*,char*,double,double); //带参数的构造函数
CContry& operator=(const CContry&); //赋值操作符重载
~CContry(); //析构函数
void set(char*,char*,double,double);//设置属性成员函数
void print()const; //在屏幕上输出CContry对象的信息
};
CContry::CContry(const CContry& t) //拷贝构造函数
{
name=new char[strlen(t.name)+1];
if(name)
{
strcpy(name,t.name);
}
caption=new char[strlen(t.caption)+1];
if(caption)
{
strcpy(caption,t.caption);
}
area=t.area;
person_num=t.person_num;
}
CContry::CContry(char* a,char* b,double c,double d) //带参数的构造函数
{
name=new char[strlen(a)+1];
if(name) strcpy(name,a);
caption=new char[strlen(b)+1];
if(caption) strcpy(caption,b);
area=c;
person_num=d;
}
CContry& CContry::operator=(const CContry& t) //赋值运算符重载
{
if(this==&t)
{
return *this;
}
delete[] name;
name=new char[strlen(t.name)+1];
if(name) strcpy(name,t.name);
delete[] caption;
caption=new char[strlen(t.caption)+1];
if(caption) strcpy(caption,t.caption);
area=t.area;
person_num=t.person_num;
return *this;
}
CContry::~CContry() //析构函数
{
cout<<"Dstructing:"<<name<<endl;
delete[] name;
delete[] caption;
}
void CContry::set(char* a,char* b,double c,double d) //设置属性成员函数
{
name=new char[strlen(a)+1];
if(name) strcpy(name,a);
caption=new char[strlen(b)+1];
if(caption) strcpy(caption,b);
area=c;
person_num=d;
}
void CContry::print()const //在屏幕上输出CContry对象的信息
{
cout<<"国家名称:"<<name<<endl
<<"首都名称:"<<caption<<endl
<<"面积:"<<area<<endl
<<"人口数量:"<<person_num<<endl<<endl<<endl;
}
void main()
{
CContry c1; //测试无参构造函数
c1.print();
CContry c2("韩国","首尔",100210.00,5042.00); //测试带参数的构造函数
c2.print();
CContry c3(c2); //测试拷贝构造函数
c3.print();
c1=c2; //测试赋值运算符重载函数
c1.print();
CContry *c4=new CContry; //new一个国家对象
c4->set("日本","东京",37.835,12665.9683);
c4->print();
delete c4; //delete日本对象
}