C++ 会员积分(虚函数和多态)

题目描述
某电商网站的会员分为:普通、贵宾两个级别

普通会员类Member,包含编号、姓名、积分三个属性,编号和积分是整数,姓名是字符串 操作包括构造、打印、积分累加、积分兑换,操作定义如下:
1、积分累加Add,是根据消费金额累加积分,无返回值,参数是消费金额(整数),积分根据消费金额按1比1的比例累加
2、积分兑换Exchange,是按照每100积分换1元的比例,把积分兑换成现金。参数是要兑换的积分数量,返回值是兑换的现金数量。
注意:兑换积分数量不足100的部分是不能兑换的,例如会员原有500积分,要兑换积分数量为450,则450/100=4,最终用400积分兑换4元,会员余100积分。
3、打印是输出会员信息,格式参考输出样例
贵宾会员类VIP,继承了普通会员的属性与操作,新增两个属性:累加比例(整数)、兑换比例(整数)。并且重定义了所有操作:
1、积分累加中,积分按累加比例进行累加。例如累加比例是2,消费金额100元,则累加积分=100*2=200
2、积分兑换中,按照兑换比例的数值把积分抵扣消费金额。例如兑换比例是90,会员原有500积分,要兑换积分数量为420,则420/90=4,最终用360积分兑换4元,会员余140积分。
3、打印是输出会员信息,格式参考输出样例

程序要求
1、采用继承机制实现上述会员关系
2、打印、积分累加和积分兑换都采用虚函数方式,来实现运行多态性
3、派生的构造函数必须考虑基类属性的构造。
4、必须采用以下代码框架,在提示的地方增加代码,其他地方不能修改。
上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求
----参考代码----

class Member {   //普通会员类
//....代码自行编写
};
class VIP .... {  //贵宾会员类
//....代码自行编写
};
int main()
{
	Member * pm; //创建一个基类对象指针
	//....其他变量自行编写
	//输入数据,创建普通会员对象mm
	//使用指针pm执行以下操作:
	//1、pm指向普通会员对象mm
	//2、输入数据,通过pm执行积分累加和积分兑换
	//3、通过pm调用打印方法输出
	//输入数据,创建贵宾会员对象vv
	//使用指针pm执行以下操作:
	//1、pm指向贵宾会员对象vv
	//2、输入数据,通过pm执行积分累加和积分兑换
	//3、通过pm调用打印方法输出
	return 0;

}

输入
第一行输入普通会员的三个信息:编号、姓名、积分
第二行输入两个操作信息:消费金额、积分兑换数量,表示普通会员执行一次积分累加,一次积分兑换
第三行输入贵宾会员的五个信息:编号、姓名、积分、累加比例、兑换比例
第四行输入两个操作信息:消费金额、积分兑换数量,表示贵宾会员执行一次积分累加,一次积分兑换
输出
第一行输出普通会员执行两个操作后的信息,要求调用打印方法 第二行输出贵宾会员执行两个操作后的信息,要求调用打印方法
样例输入
1001 John 500 244 300
8001 Jane 300 2 90 100 420
样例输出
普通会员1001–John–444
贵宾会员8001–Jane–140

#include<iostream>
#include <cstring>
using namespace std;
class Member {   //普通会员类
	protected:
		int num;
		int  integral;
		char *name;
	public:
		Member(int n,char na[],int i) {
			name=new char[strlen(na)+1];
			strcpy(name,na);
			num=n;
			integral=i;
		}
		virtual void Add(int money) {
			integral+=money;
		}
		virtual int Exchange(int i) {
			i=i/100;
			integral-=(i*100);
			return i;
		}
		virtual void display() {
			cout<<"普通会员"<<num<<"--"<<name<<"--"<<integral<<endl;
		}
		~Member() {
			if(name!=NULL)
				delete name;
		}
};
class VIP :public Member {  //贵宾会员类
	private:
		int Add_pro; //累加比例
		int Exg_pro; //兑换比例
	public:
		VIP(int n,char *na,int i,int add,int exg):Member(n,na,i) {
			Add_pro=add; //累加比例
			Exg_pro=exg; //兑换比例
		}
		virtual void Add(int money) {
			integral+=(money*Add_pro);
		}
		virtual int Exchange(int i) {
			i=i/Exg_pro;
			integral-=(i*Exg_pro);
			return i;
		}
		virtual void display() {
			cout<<"贵宾会员"<<num<<"--"<<name<<"--"<<integral<<endl;
		}
};
int main() {
	Member * pm; //创建一个基类对象指针
	//....其他变量自行编写
	int num,inte,add_m,exg_m,add,exg;
	char n[100];
	cin>>num>>n>>inte;
	cin>>add>>exg;
	Member mm(num,n,inte);
	pm=&mm;
	pm->Add(add);
	pm->Exchange(exg);
	pm->display();
	cin>>num>>n>>inte>>add_m>>exg_m;
	cin>>add>>exg;
	VIP vv(num,n,inte,add_m,exg_m);
	pm=&vv;
	pm->Add(add);
	pm->Exchange(exg);
	pm->display();
	return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值