您的位置:首页 > 文旅 > 旅游 > 临沧市网站建设_河南洛阳网站建设_推广营销是什么_百度打广告收费表

临沧市网站建设_河南洛阳网站建设_推广营销是什么_百度打广告收费表

2025/4/14 21:37:52 来源:https://blog.csdn.net/2401_85504450/article/details/147032303  浏览:    关键词:临沧市网站建设_河南洛阳网站建设_推广营销是什么_百度打广告收费表
临沧市网站建设_河南洛阳网站建设_推广营销是什么_百度打广告收费表

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <random>using namespace std;// 前向声明 Weapon 类
class Weapon;// 英雄类,包含英雄的基本属性和装备武器的方法
class Hero {
private:int hp;  // 英雄的生命值int atk; // 英雄的攻击力int def; // 英雄的防御力int spd; // 英雄的速度
public:// 构造函数,初始化英雄的属性Hero(int h = 0, int a = 0, int d = 0, int s = 0): hp(h), atk(a), def(d), spd(s){}// 设置英雄攻击力的方法void setAtk(int a) { atk = a; }// 设置英雄防御力的方法void setDef(int d) { def = d; }// 设置英雄速度的方法void setSpd(int s) { spd = s; }// 设置英雄生命值的方法void setHp(int h) { hp = h; }// 获取英雄攻击力的方法int getAtk() { return atk; }// 获取英雄防御力的方法int getDef() { return def; }// 获取英雄速度的方法int getSpd() { return spd; }// 获取英雄生命值的方法int getHp() { return hp; }// 英雄装备武器的方法void equipWeapon(Weapon* w);
};// 武器基类,定义了武器的基本属性和行为
class Weapon {
private:int atk; // 武器的攻击力public:// 构造函数,初始化武器的攻击力Weapon(int atk = 1) : atk(atk) {}// 设置武器攻击力的方法void setAtk(int a) { atk = a; }// 获取武器攻击力的方法int getAtk() { return atk; }// 根据武器类型的不同,英雄获得不同的属性virtual void getAttr(Hero& hero) {// 武器基类只有攻击力,所以英雄只能获得攻击力int new_atk = hero.getAtk() + atk;hero.setAtk(new_atk);}// 纯虚函数,用于实现多态virtual void purl_virtual_func() = 0;
};// 剑类,继承自武器基类
class Sword : public Weapon {
private:int hp; // 剑额外增加的生命值
public:// 构造函数,初始化剑的攻击力和额外生命值Sword(int atk = 1, int hp = 1): Weapon(atk), hp(hp){}// 设置剑额外生命值的方法void setHp(int h) { hp = h; }// 获取剑额外生命值的方法int getHp() { return hp; }// 重写获取属性的方法,剑能增加英雄的攻击力和生命值virtual void getAttr(Hero& hero) {// 先调用基类的方法增加攻击力Weapon::getAttr(hero);int new_hp = hero.getHp() + hp;hero.setHp(new_hp);}// 实现纯虚函数void purl_virtual_func() {}
};// 匕首类,继承自武器基类
class Blade : public Weapon {
private:int spd; // 匕首额外增加的速度
public:// 构造函数,初始化匕首的攻击力和额外速度Blade(int atk = 1, int spd = 1): Weapon(atk), spd(spd){}// 设置匕首额外速度的方法void setSpd(int s) { spd = s; }// 获取匕首额外速度的方法int getSpd() { return spd; }// 重写获取属性的方法,匕首能增加英雄的攻击力和速度virtual void getAttr(Hero& hero) {// 先调用基类的方法增加攻击力Weapon::getAttr(hero);int new_spd = hero.getSpd() + spd;hero.setSpd(new_spd);}// 实现纯虚函数void purl_virtual_func() {}
};// 英雄装备武器的具体实现方法
void Hero::equipWeapon(Weapon* w) {// 英雄装备武器的目的,是为了获得不同的属性// 根据武器的类型不同,获得的属性是不同的// 我只要让不同武器,里面都写上一个叫做 getAttr的函数,但是不同的武器,getAttr函数会为英雄获得不同的属性w->getAttr(*this);
}// 怪物类,包含怪物的基本属性和死亡掉落武器的方法
class Monster {
private:int hp;  // 怪物的生命值int atk; // 怪物的攻击力int def; // 怪物的防御力
public:// 构造函数,初始化怪物的属性Monster(int h = 0, int a = 0, int d = 0): hp(h), atk(a), def(d){}// 判断怪物是否存活的方法bool isAlive() {return hp > 0;}// 怪物死亡的方法,随机掉落武器Weapon* die() {// 创建随机数生成器random_device rd;mt19937 gen(rd());uniform_int_distribution<> dis(0, 1);int random_num = dis(gen);if (random_num == 0) {return new Sword();} else {return new Blade();}}
};int main(int argc, const char** argv) {// 创建怪物对象Monster monster(100, 20, 10);// 创建英雄对象Hero hero;// 模拟英雄打死怪物if (!monster.isAlive()) {// 怪物死亡,获取掉落的武器Weapon* droppedWeapon = monster.die();if (droppedWeapon) {// 英雄装备掉落的武器hero.equipWeapon(droppedWeapon);// 释放武器内存delete droppedWeapon;}}return 0;
}
#include <iostream>
// 引入模板
template <typename T>
class list {
public:// 定义链表节点结构体struct Node {T val;Node* next;Node* prev;Node(const T& value) : val(value), next(nullptr), prev(nullptr) {}};// 构造函数list() : head(nullptr), tail(nullptr) {}// 析构函数~list() {while (head) {Node* temp = head;head = head->next;delete temp;}}// 在链表尾部添加元素void push_back(const T& value) {Node* newNode = new Node(value);if (!head) {head = newNode;tail = newNode;} else {newNode->prev = tail;tail->next = newNode;tail = newNode;}}// 重载输出运算符friend std::ostream& operator<<(std::ostream& os, const list<T>& lst) {Node* current = lst.head;while (current) {os << current->val << " ";current = current->next;}return os;}// 重载下标运算符T& operator[](size_t index) {Node* current = head;size_t count = 0;while (current && count < index) {current = current->next;count++;}if (current) {return current->val;}// 这里简单处理,实际可根据需求抛出异常throw std::out_of_range("Index out of range");}private:Node* head; // 记录链表头节点Node* tail; // 记录链表尾节点
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com