C++例子

1.分别用类重载和友元重载实现自定义加法和减法

#include <iostream>
using namespace std;

class MM
{
public:
	MM(){}; //无参构造函数
	MM(int mmX, int mmY) //有参构造函数
	{
		this->mmX = mmX; //用this指针初始化 形参名字和变量名字相同 用this区分
		this->mmY = mmY;
	}
	MM& operator+(MM &mm) //类重载 MM为返回的类型 函数名由operator和+组成 参数=操作数-1 &mm引用,取别名 参数可以被强转
	{
		MM tempMM; //定义tempMM
		tempMM.mmX = this->mmX + mm.mmX;
		tempMM.mmY = this->mmY + mm.mmY;
		return tempMM;
	}
	friend MM operator-(MM &maxMM, MM &minMM); //友元重载 自定义减法的操作 参数个数=操作数

	void print() //打印
	{
		cout << "x:" << mmX << "\ty:" << mmY << endl;
	}
protected:
	int mmX; //定义了变量
	int mmY;

};
MM operator-(MM &maxMM, MM &minMM) //友元函数
{
	MM temp;
	temp.mmX = maxMM.mmX - minMM.mmX;
	temp.mmY = maxMM.mmY - minMM.mmY;
	return temp;
}

int main()
{
	MM maxMM(100, 200); //复数
	MM minMM(300, 400);
	MM mm = maxMM + minMM; //类重载 实质是 maxMM.operator+(minMM)
	mm.print();
	mm = maxMM - minMM; //友元重载 实质是 operator-(maxMM,minMM)
	mm.print();


	while (1);
	return 0;
}

在这里插入图片描述
2.身份证设定
more
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<iomanip>
using namespace std;

class date
{
  private:
	int y,m,d;
 public:
	date(int year,int month,int day)
	{
	y=year;
	m=month;
	d=day;
	}
	int getyear() {return y;}
	int getmonth() {return m;}
	int getday() {return d;}	
};

class PID
{
 private:
	int type;
	char id[19];
	date cdate;
public:
	PID(int t,char _id[],date _cdate);
	void print();
	void up();
//	~PID();
};
PID::PID(int t,char _id[],date _cdate):type(t),cdate(_cdate)
{
	int i,n;
	if(type==1)
		n=15;
	else
		n=18;
	for(i=0;i<n;i++)
		id[i]=_id[i];
}

void PID::up()
{
	if(type==2)
		return;
	int i,n=0;
	for(i=16;i>7;i--)
		id[i]=id[i-2];
	if(cdate.getyear()>=2000)
	{
		id[6]=2+'0';
		id[7]=0+'0';
	}
	else
	{
		id[6]=1+'0';
		id[7]=9+'0';
	}
	for(i=0;i<17;i++)
		n+=(id[i]-'0');
	n=n%10;
	if(n==0)
		id[17]='X';
	else
		id[17]=n+'0';
}
void PID::print()
{
	id[18]='\0';
	cout<<"type=2"<<" ";
	cout<<"birth="<<setw(2)<<setfill('0')<<cdate.getyear()<<"."<<
	setw(2)<<setfill('0')<<cdate.getmonth()<<"."<<
	setw(2)<<setfill('0')<<cdate.getday()<<endl;
	cout<<"ID="<<id<<endl;
}

int main()
{
	int type;
	char id[19];
	int y,m,d,i,t;
	cin>>t;
	while(t--)
	{
	cin>>type;
	if(type==1)
		for(i=0;i<15;i++)
			cin>>id[i];
	else
		for(i=0;i<18;i++)
			cin>>id[i];
	cin>>y>>m>>d;
	PID sb(type,id,date(y,m,d));
	sb.up();
	sb.print();
	}
}

3.手机服务more
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;

class Date
{
  private:
	int year,month,day;
 public:
	Date(int y,int m,int d):year(y),month(m),day(d) {}
	int gety() {return year;}
	int getm() {return month;}
	int getd() {return day;}
	void print() {}
};

class phone
{
 private:
	char type;
	string number;
	int status;
	Date *date;
 public:
	phone(char t,string n,int s): type(t),number(n),status(s)
	{
	cout<<"Construct a new phone"<<number<<endl;
	if(type=='A')
		cout<<"类型=机构||";
	else if (type=='B')
		cout<<"类型=企业||";
	cout<<"号码="<<number;

	if(status==1)
		cout<<"||State=在用"<<endl;
	else if(status==2)
		cout<<"||State=未用"<<endl;
	else if(status==3)
		cout<<"||State=停用"<<endl;
	}

phone(phone &s)
{
	type=s.type;
	status=s.status;
	number=s.number;
	cout<<"Construct a copy of phone"<<number<<endl;
	cout<<"类型=备份||号码="<<number<<"X";		
	if(status==1)
		cout<<"||State=在用"<<endl;
	else if(status==2)
		cout<<"||State=未用"<<endl;
	else if(status==3)
		cout<<"||State=停用"<<endl;
	}
vodi stop(Date &s)
{
	cout<<"Stop the phone "<<number<<endl;
	if(type=='A')
		cout<<"类型=机构||";
	else if (type=='B')
		cout<<"类型=企业||";
	cout<<"号码="<<number;
	cout<<"||State=停用 ||停机日期="
		<<s.gety()<<"."
		<<s.getm()<<"."
		<<s.getd()<<endl;
	cout<<"----"<<endl;
	}

};

int main()
{
	int year,month,day,status,t;
	char type;
	string number;
	cin>>t;
	while(t--)
	{
	cin>>type>>number>>status>>year>>month>>day;
	phone sb1(type,number,status);
	Date sb2(year,month,day);
	phone sb3(sb1);
	sb1.stop(sb2);
	}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值