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

有一个类定义如下:
class CRmb
{
private:
int yuan;
int jiao;
int fen;
public:
CRmb(){yuan=0; jiao=0; fen=0;}
CRmb(int, int, int); // 带参数的构造函数
CRmb(const CRmb &); // 拷贝构造函数
CRmb(double); // 类型转换构造函数,将一个实型数据转换成人民币对象
~CRmb(); // 析构函数
friend ostream & operator<<(ostream& out, const CRmb &); // 在屏幕上输出
Rmb的值,输出格式如下:
// 现在有: 元 角 分
//======如下函数自己设计原型==========
//(1)前自增运算符重载函数,要求实现对分自增1,并且考虑进位问题
//(2)后自增运算符重载函数,要求实现对分自增1,并且考虑进位问题
//(3)重载“+”运算符,要求实现下面两种加法运算
// a、CRmb对象+CRmb对象
// b、CRmb对象+double对象
};
在上述基础上,按要求完善类的定义:
(1) 完善类的所有成员函数定义
(2) 在析构函数中输出:“析构函数被调用!”
(3) 提供以下类的完整测试程序,不允许进行修改。
void fn(CRmb& x)
{
cout<<"In fn: "<<x<<endl;
}
void main()
{
CRmb m1;
cout<<m1<<endl<<endl<<endl;
CRmb m2(1001, 9, 9);
m2++;
cout<<m2<<endl;
++m2;
cout<<m2<<endl<<endl<<endl;
CRmb m3(m2);
cout<<m3<<endl<<endl<<endl;
CRmb m4=m1+m2;
cout<<m4<<endl;
m4=m1+50.0;
cout<<m4<<endl<<endl<<endl;
fn(50.13);
}
 

/*=======================================================
*学号:
*作业:E19
*功能:(1) 完善类的所有成员函数定义
       (2) 在析构函数中输出:“析构函数被调用!”
       (3) 提供以下类的完整测试程序,不允许进行修改。
*作者:
*日期:2016.5.22
*========================================================*/

#include<iostream>

using namespace std;

class CRmb
{
private:
	int yuan;
	int jiao;
	int fen;
public:
	CRmb(){yuan=0;jiao=0;fen=0;}
	CRmb(int,int,int);                       //带参数的构造函数
	CRmb(const CRmb&);                       //拷贝构造函数
	CRmb(double);                            //类型转换构造函数,将一个实型数据转换成人民币对象
	~CRmb();                                 //析构函数
	CRmb& operator++();                      //前自增
	CRmb operator++(int);                    //后自增
	CRmb& operator+(CRmb& rhs);               //重载“+”运算符
	CRmb& operator+(double);                  //重载“+”运算符
	friend ostream& operator<<(ostream& out,const CRmb&);//在屏幕上输出Rmb的值,输出格式如下:
	                                                     //现在有: 元 角 分
};

CRmb::CRmb(int a,int b,int c)             //带参数的构造函数
{
	yuan=a;
	jiao=b;
	fen=c;
}

CRmb::CRmb(const CRmb& t)                //拷贝构造函数
{
	yuan=t.yuan;
	jiao=t.jiao;
	fen=t.fen;
}

CRmb::CRmb(double x)                     //类型转换构造函数,将一个实型数据转换成人民币对象       
{
	x=(int)(x*100);
	yuan=(int)x/100;
	x=(int)x%100;
	jiao=(int)x/10;
	fen=(int)x%10;
}

CRmb::~CRmb()                           //析构函数
{
	cout<<"Destructing:"<<yuan<<endl;
}

CRmb& CRmb::operator++()               //前自增
{
	++fen;
	if(fen==10)
	{
		fen=0;
		++jiao;
		if(jiao==10)
		{
			jiao=0;
			++yuan;
		}
	}
	return *this;
}

CRmb CRmb::operator++(int)             //后自增
{
	CRmb ret=*this;
	++fen;
	if(fen==10)
	{
		fen=0;
		++jiao;
		if(jiao==10)
		{
			jiao=0;
			++yuan;
		}
	}
	return ret;
}

CRmb& CRmb::operator+(CRmb& rhs)                  //重载“+”运算符
{
	fen+=rhs.fen;
	if(fen>=10)
	{
		fen=fen%10;
		++jiao;
	}
	jiao+=rhs.jiao;
	if(jiao>=10)
	{
		jiao=jiao%10;
		++yuan;
	}
	yuan+=rhs.yuan;
	return *this;
}

CRmb& CRmb::operator+(double a)                      //重载“+”运算符
{
	double x=this->yuan*100+this->jiao*10+this->fen;
	x=(x*1.0)/100;
	x+=a;
	return CRmb(x);
}

ostream& operator<<(ostream& out,const CRmb& t)                  //输出操作运算符重载
{
	out<<"现在有:"<<t.yuan<<"元"<<t.jiao<<"角"<<t.fen<<"分"<<endl;
	return out;
}

void fn(const CRmb& x)
{
	cout<<"ln fn:"<<x<<endl;
}

void main()
{
	CRmb m1;
	cout<<m1<<endl<<endl<<endl;

	CRmb m2(1001,9,9);
	m2++;
	cout<<m2<<endl;
	++m2;
	cout<<m2<<endl<<endl<<endl;

	CRmb m3(m2);
	cout<<m3<<endl<<endl<<endl;

	CRmb m4=m1+m2;
	cout<<m4<<endl;
	m4=m1+50.0;
	cout<<m4<<endl<<endl<<endl;

	fn(50.13);
}

猜你喜欢

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