构造函数,拷贝构造,析构函数,赋值运算符重载(C++)

有一个类定义如下:
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日本对象
}

猜你喜欢

转载自blog.csdn.net/ukco_well/article/details/86576949