写一个C++代码 具体实现步骤: 第一步:建立公交卡(boardingcard)的结构 第二步:创建并实现公交卡类构造函数、公交卡充值函数、公交卡余额查询函数、公交卡刷卡消费函数,创建纯虚函数用于完成...
时间: 2024-03-22 22:39:43 浏览: 102
好的,我可以帮你写一个C++代码,具体实现步骤如下:
第一步:建立公交卡(boardingcard)的结构
```c++
struct boardingcard{
string card_num; // 卡号
double balance; // 余额
bool is_valid; // 是否有效
};
```
第二步:创建并实现公交卡类
```c++
class BusCard{
public:
BusCard(string card_num, double balance){
this->card.card_num = card_num;
this->card.balance = balance;
this->card.is_valid = true;
}
virtual void recharge(double amount) = 0; // 充值
virtual double query_balance() = 0; // 查询余额
virtual bool consume(double amount) = 0; // 消费
protected:
boardingcard card;
};
```
在这个类中,我们定义了三个纯虚函数:充值、查询余额、消费。这些函数的实现将由派生类完成。同时,我们还定义了一个受保护的数据成员,即boardingcard结构体类型的数据成员card,用于记录公交卡的信息。
第三步:创建派生类
```c++
class CardA : public BusCard{
public:
CardA(string card_num, double balance) : BusCard(card_num, balance){}
void recharge(double amount){
this->card.balance += amount*1.1; // 每次充值额外增加10%
}
double query_balance(){
return this->card.balance;
}
bool consume(double amount){
if(this->card.is_valid && this->card.balance >= amount){
this->card.balance -= amount;
return true;
}
return false;
}
};
class CardB : public BusCard{
public:
CardB(string card_num, double balance) : BusCard(card_num, balance){}
void recharge(double amount){
this->card.balance += amount*1.2; // 每次充值额外增加20%
}
double query_balance(){
return this->card.balance;
}
bool consume(double amount){
if(this->card.is_valid && this->card.balance >= amount){
this->card.balance -= amount;
return true;
}
return false;
}
};
```
在这里,我们创建了两个派生类:CardA和CardB,它们分别实现了BusCard类中的三个纯虚函数。CardA的充值额外增加10%,CardB的充值额外增加20%。
现在我们可以使用这些类来创建公交卡对象,并进行充值、查询余额、消费等操作了。例如:
```c++
int main(){
BusCard* card1 = new CardA("001", 100);
BusCard* card2 = new CardB("002", 200);
card1->recharge(50);
card2->recharge(50);
cout << "card1 balance: " << card1->query_balance() << endl;
cout << "card2 balance: " << card2->query_balance() << endl;
card1->consume(20);
card2->consume(30);
cout << "card1 balance: " << card1->query_balance() << endl;
cout << "card2 balance: " << card2->query_balance() << endl;
delete card1;
delete card2;
return 0;
}
```
上面的代码创建了两个公交卡对象,分别为CardA类型和CardB类型,然后进行了一些充值、查询余额、消费等操作。最后,我们使用delete释放了动态分配的内存。
希望这个代码能够帮到你!
阅读全文