已知角色可以变身为怪物,现在main函数中,模拟某个角色在正常情况下以及在变身状态下的各种状态操作(输入1为正常hero,输入2则变身为monster)。 要求,使用抽象类及的基类指针实现。
时间: 2024-02-22 13:55:40 浏览: 144
模拟输入
5星 · 资源好评率100%
好的,您可以先定义一个抽象类`Character`,其中包含角色的基本属性和方法,例如角色的名字、血量、攻击力等等,并声明一个纯虚函数`transform()`来表示变身的操作。然后再定义两个类`Hero`和`Monster`,分别继承自`Character`,并实现`transform()`函数以实现变身操作。
下面是示例代码:
```c++
#include <iostream>
using namespace std;
class Character {
protected:
string name;
int hp;
int atk;
public:
Character(string _name, int _hp, int _atk) : name(_name), hp(_hp), atk(_atk) {}
virtual void show() = 0; // 纯虚函数,表示所有子类都必须实现该函数
virtual void transform() = 0; // 纯虚函数,表示变身操作
};
class Hero : public Character {
public:
Hero(string _name, int _hp, int _atk) : Character(_name, _hp, _atk) {}
void show() {
cout << "英雄 " << name << ",血量:" << hp << ",攻击力:" << atk << endl;
}
void transform() {
cout << "英雄 " << name << " 变身为怪物!" << endl;
hp *= 2;
atk *= 2;
}
};
class Monster : public Character {
public:
Monster(string _name, int _hp, int _atk) : Character(_name, _hp, _atk) {}
void show() {
cout << "怪物 " << name << ",血量:" << hp << ",攻击力:" << atk << endl;
}
void transform() {
cout << "怪物 " << name << " 变回英雄!" << endl;
hp /= 2;
atk /= 2;
}
};
int main() {
Character* c;
cout << "请选择角色类型(1为英雄,2为怪物):" << endl;
int type;
cin >> type;
if (type == 1) {
c = new Hero("张三", 100, 10);
} else {
c = new Monster("绿皮怪", 50, 5);
}
c->show();
cout << "角色变身!" << endl;
c->transform();
c->show();
delete c;
return 0;
}
```
在程序中,我们使用抽象类`Character`定义了一个基类指针`c`,根据用户输入的类型来创建`Hero`或`Monster`对象并赋值给基类指针`c`,这样就可以通过基类指针来访问到各种不同类型的角色。然后,我们调用`c->show()`函数来展示角色的基本属性,再调用`c->transform()`函数来变身,最后再次调用`c->show()`函数来展示变身后的属性。最后,别忘了销毁对象。
阅读全文