用继承和类来写
时间: 2024-02-11 17:06:59 浏览: 18
好的,以下是使用继承和类来实现新建会员、充值、消费和查询功能的C++程序。这里将会员分为普通会员和VIP会员两种类型,分别继承于会员基类,具有不同的属性和方法。
```c++
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 会员基类
class Member {
public:
Member(string name, int id) : name(name), id(id), balance(0) {}
virtual void recharge(int money) = 0; // 充值
virtual bool consume(int money) = 0; // 消费
int getId() const { return id; } // 获取会员编号
int getBalance() const { return balance; } // 获取余额
protected:
string name; // 姓名
int id; // 会员编号
int balance; // 余额
};
// 普通会员
class OrdinaryMember : public Member {
public:
OrdinaryMember(string name, int id) : Member(name, id) {}
void recharge(int money) override { balance += money; } // 充值
bool consume(int money) override { // 消费
if (balance < money) {
cout << "余额不足!" << endl;
return false;
}
balance -= money;
return true;
}
};
// VIP会员
class VipMember : public Member {
public:
VipMember(string name, int id) : Member(name, id) {}
void recharge(int money) override { balance += money * 1.1; } // 充值
bool consume(int money) override { // 消费
if (balance < money) {
cout << "余额不足!" << endl;
return false;
}
balance -= money * 0.9;
return true;
}
};
vector<Member*> members; // 存储会员信息的容器
// 新建会员
void createMember() {
string name;
int id, type;
cout << "请输入姓名:";
cin >> name;
cout << "请输入会员编号:";
cin >> id;
cout << "请选择类型(1. 普通会员 2. VIP会员):";
cin >> type;
if (type == 1) {
members.push_back(new OrdinaryMember(name, id));
}
else if (type == 2) {
members.push_back(new VipMember(name, id));
}
cout << "会员创建成功!" << endl;
}
// 充值
void recharge() {
int id, money;
cout << "请输入会员编号:";
cin >> id;
auto iter = find_if(members.begin(), members.end(), [id](const Member* m) { return m->getId() == id; });
if (iter != members.end()) {
cout << "请输入充值金额:";
cin >> money;
(*iter)->recharge(money);
cout << "充值成功!" << endl;
}
else {
cout << "会员不存在!" << endl;
}
}
// 消费
void consume() {
int id, money;
cout << "请输入会员编号:";
cin >> id;
auto iter = find_if(members.begin(), members.end(), [id](const Member* m) { return m->getId() == id; });
if (iter != members.end()) {
cout << "请输入消费金额:";
cin >> money;
if ((*iter)->consume(money)) {
cout << "消费成功!" << endl;
}
}
else {
cout << "会员不存在!" << endl;
}
}
// 查询余额
void queryBalance() {
int id;
cout << "请输入会员编号:";
cin >> id;
auto iter = find_if(members.begin(), members.end(), [id](const Member* m) { return m->getId() == id; });
if (iter != members.end()) {
cout << "余额为:" << (*iter)->getBalance() << endl;
}
else {
cout << "会员不存在!" << endl;
}
}
int main() {
int choice;
while (true) {
cout << "请选择功能:" << endl;
cout << "1. 新建会员" << endl;
cout << "2. 充值" << endl;
cout << "3. 消费" << endl;
cout << "4. 查询余额" << endl;
cout << "5. 退出" << endl;
cin >> choice;
switch (choice) {
case 1:
createMember();
break;
case 2:
recharge();
break;
case 3:
consume();
break;
case 4:
queryBalance();
break;
case 5:
for (auto m : members) {
delete m;
}
return 0;
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
}
return 0;
}
```
这段代码使用了继承和多态的机制,使得程序更加灵活和可扩展。同时,使用了动态内存管理,需要注意及时释放内存。