刷野打怪上王者·C++篇·第16期·多态处理

打怪C++代码 在一款电脑游戏中,你需要打败n只怪物(从1到n编号)。 为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值。任何时候你的生命值都不能降到0(或0以下)。 请问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉 阅读详情

参考链接

RUNOOB.COM

多态处理

    我们在前面已经讲过继承的定义,但是当我们遇到继承类和基类中的方法相同时,程序该如何运行呢?这时,就需要引入C++中多态操作。多态调用时,会根据函数对象类型执行不同函数:

#include <iostream>

using namespace std;

/*几何的基本信息类*/
class cubeInfoClass
{
public:
	cubeInfoClass(int iTmpVar1, int iTmpVar2);
	virtual int cubeArea()  //虚函数
	{
		cout << "几何的基本信息类" << endl;
		return 1;
	}
protected:
	int width;
	int length;
};

cubeInfoClass::cubeInfoClass(int iTmpVar1, int iTmpVar2)
{
	width = iTmpVar1;
	length = iTmpVar2;
}

/*长方形类*/
class rectangleClass: public cubeInfoClass
{
public:
	rectangleClass(int iTmpVar1, int iTmpVar2) :cubeInfoClass(iTmpVar1, iTmpVar2) {}
	int cubeArea()
	{
		cout << "长方形面积" << endl;
		return width * length;
	}

};

/*正方形类*/
class squareClass : public cubeInfoClass
{
public:
	squareClass(int iTmpVar1, int iTmpVar2) :cubeInfoClass(iTmpVar1, iTmpVar2) {}
	int cubeArea()
	{
		cout << "正方形面积" << endl;
		return width * length;
	}

};

int main()
{
	cubeInfoClass *cubeInfo;
	rectangleClass rectangle(10, 5);
	squareClass square(5, 5);  //声明并初始化类中成员变量

	cubeInfo = &rectangle;       //矩形信息指针指向长方形
	cout << cubeInfo->cubeArea() << endl;


	cubeInfo = &square;        //矩形信息指针指向正方形
	cout << cubeInfo->cubeArea() << endl;

	getchar();
}

运行结果

长方形面积
50
正方形面积
25

注:在基类中cubeArea函数前添加了virtual类,使编译器查看的是指针内容,而不是它的类型。因为先后指向的是rectangleClass和squareClass地址 ,所以在求矩形面积时,调用各自的声明的方法。 

虚函数与纯虚函数

(1)虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。  

(2)虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。

(3) 虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。

(4) 虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口。

下面举实例说明:

#include <iostream>

using namespace std;

/*几何的基本信息类*/
class cubeInfoClass
{
public:
	cubeInfoClass(int iTmpVar1, int iTmpVar2);
	/*
	virtual int cubeArea()   //虚函数
	{
		cout << "几何的基本信息类" << endl;
		return 1;
	}
	*/
	virtual int cubeArea() = 0;  //纯虚函数
protected:
	int width;
	int length;
};

cubeInfoClass::cubeInfoClass(int iTmpVar1, int iTmpVar2)
{
	width = iTmpVar1;
	length = iTmpVar2;
}

/*长方形类*/
class rectangleClass: public cubeInfoClass
{
public:
	rectangleClass(int iTmpVar1, int iTmpVar2) :cubeInfoClass(iTmpVar1, iTmpVar2) {}
	int cubeArea()
	{
		cout << "长方形面积" << endl;
		return width * length;
	}

};

/*正方形类*/
class squareClass : public cubeInfoClass
{
public:
	squareClass(int iTmpVar1, int iTmpVar2) :cubeInfoClass(iTmpVar1, iTmpVar2) {}
	int cubeArea()
	{
		cout << "正方形面积" << endl;
		return width * length;
	}

};

int main()
{
	cubeInfoClass *cubeInfo;
	rectangleClass rectangle(10, 5);
	squareClass square(5, 5);  //声明并初始化类中成员变量

	cubeInfo = &rectangle;       //矩形信息指针指向长方形
	cout << cubeInfo->cubeArea() << endl;


	cubeInfo = &square;        //矩形信息指针指向正方形
	cout << cubeInfo->cubeArea() << endl;

	getchar();
}

运行结果同上。

更多《计算机视觉与图形学》知识,可关注下方公众号:

 

c++小游戏(打怪) cout<<"小怪物还剩"<<(*g_shengmingli)-(*tongji1)<<"点生命"<<endl;cout<<"大怪物还剩"<<(*g_shengmingli)-(*tongji1)<<"点生命"<<endl;cout<<"你还剩"<<shengmingli-(*tongji2)<<"点生命"<<endl;cout<<"你还剩"<<shengmingli-(*tongji2)<<"点生命"<<endl;\n有一家药店"<<endl;cout<<"现在是"<<"第"<<*huihe<<"回合! 阅读详情

相关推荐

奥特曼打怪兽

现在有一个奥特曼打怪兽的角色扮演游戏。请你根据下面的描述,定义两个类:奥特曼类和怪兽类。 在奥特曼的世界,打怪兽就是全部。现在人人都有机会成为奥特曼,加入到与怪兽无止境的战斗中。可惜,并非人人生来就是英雄,革命尚未成功,同志仍需努力啊。每一个奥特曼都要从零开始,辛勤劳动,打怪升级,最终才能成为举世瞩目的大英雄。 奥特曼的等级(rank)从第一级开始,随着它打怪兽经验(exp)的增加,等级将不断攀升。随着等级的升高,奥特曼的生命值(hp)上限和攻击力(damage)也将大大增强。在与怪兽的战斗中,奥特曼收获的不仅仅是经验。有时,运气好的话,还能从怪兽身上弄到点小钱(money)。不要小看这些钱,关键时刻,它能给奥特曼买药补血呀。奥特曼没有金刚不坏之身,在与怪兽的战斗中,奥特曼会受到伤害。一旦奥特曼的生命值降到0,它英雄的一生就结束了。 好了,了解了奥特曼的基本情况,现在可以开始战斗了。首先,我们需要一位全新的奥特曼,我们给它赋予一定的初始实力(initial)。让它投入战斗吧! 在与怪兽的战斗中要讲究策略。所谓知己知彼,百战不殆,一旦碰到怪兽,我们首先要查看自己和对方的实力(display),包括双方的等级、生命值、攻击力、经验和所拥有的钱财。所谓打得赢就打,打不赢就跑。如果对手太强大,逃跑吧(escape)!偶尔逃跑无伤颜面,但会耗费一点生命值。如果总是逃跑,生命被虚耗,那英雄就当不成了。所以该出手时就出手,勇敢地战斗(attack)吧!每一回合的战斗中,怪兽会受到攻击(attacked),怪兽也会反击(fightback),让奥特曼受到攻击(attacked)。每一回合结束,只要奥特曼还活着(isalive),而且怪兽也还活着,战斗就要继续。如果奥特曼的生命值太低,也许抵挡不了下一轮的进攻,那么别财迷了,掏钱出来给它补血(restore)吧。当然,如果形势确实不妙,奥特曼也可以中途逃跑。但如果获得了最终的胜利(win),不仅能赢得战斗经验,夺取怪兽身上的钱财,足够多的经验也许能让奥特曼升级(upgrade)。 以及其实现。

C++ 奥特曼打怪兽之类的实现(系列2)

题目描述 在实验《类定义》的基础,改进并实现游戏中的两个类:奥特曼类和怪兽类。使得两个类更加接近实际要求。 奥特曼说明如下: 为每个属性设置get方法,注意奥特曼所有属性都需要 初始化(利用构造函数完成初始化),参数是等级,等级与其他属性的关系:生命是等级10倍,攻击是等级3倍,金钱是等级的10倍,经验开始为0。 逃跑(escape),当生命不超过10点时,奥特曼将逃跑,逃跑将损失所有金钱,战斗结果为奥特曼失败(lose) 攻击(attack),(这个方法要参数么??),当攻击怪兽时,怪兽.

hhhertzzz的博客 4600

李超打怪兽

这个是我自己写的一个c++文字界面游戏,因为是文字界面,所以见面很垃圾

C++ 奥特曼打怪兽之类的应用(系列3)

题目描述 在前面实验的基础上,根据题目要求进行修改,实现打斗过程。 怪兽分为四种类型(定义四个类): 普通型怪兽(NMonster):攻击力是等级2倍,生命是10倍,金钱经验是10倍 攻击型怪兽(AMonster):攻击力是等级4倍,生命是5倍,金钱经验是10倍 防御型怪兽(DMonster):攻击力是等级1倍,生命是20倍,金钱经验是10倍 肉鸡型怪兽(SMonster):攻击力是等级1倍,生命是10倍,金钱经验是20倍 定义一个守护神类(Angel),该类定义怪兽或奥特曼的守护神,为.

hhhertzzz的博客 2972

怪兽C++程序

大作业哦 C++代码

打怪类小游戏

打怪类小游戏。自己编的第一个十分简陋的小游戏。 如果有朋友第一次编小游戏,可以下载一下。 希望对大家有所帮助。

c++打怪小游戏

今天给大家带来一个简单的打怪游戏(事实上熬了1天),游戏特效借鉴,如有侵权,立即删除!

fjhfjj的博客 580

超简单的打怪游戏

易语言写的模仿打怪游戏,超简单,打了怪物怪物会少血,但如果不一次打死的话,怪物的血会自动恢复

刷野打怪上王者·C++篇·第27期·总结

刷野打怪上王者·C++篇·第26期·时间函数&预处理 刷野打怪上王者·C++篇·第25期·动态内存处理 刷野打怪上王者·C++篇·第24期·信号处理 刷野打怪上王者·C++篇·第23期·标准流输入输出 刷野打怪上王者·C++篇·第22期·多线程处理 刷野打怪上王者·C++篇·第21期·模板处理 刷野打怪上王者·C++篇·第20期·命名空间 刷野打怪上王者·C++篇·第19期·...

CSS360的博客 1617

C++版玩家PK怪物游戏

C++版玩家PK怪物游戏案例,挂机游戏案例,适合初学C++者学习。

「Unity3D」Addressable版本冲突解析:SBP与Addressables兼容性问题实战指南

本文深入解析Unity3D中Addressable与SBP(Scriptable Build Pipeline)版本冲突问题,提供实战解决方案。当遇到「Build Task CreateBuiltInShadersBundle failed」错误时,可通过版本匹配、临时资源引用或构建参数调整解决。文章详细分析兼容性原理,并给出版本组合指南与最佳实践,帮助开发者高效处理资源构建问题。

weixin_29001683的博客 410

超好玩C++打怪(打作业)游戏,把各种作业设置成怪

超好玩C++打怪(打作业)游戏,把各种作业设置成怪

yaosichengalpha的博客 1266

Zynq UltraScale+ MPSoC-AMP(linux+裸机)

接着 Zynq UltraScale+ MPSoC-双核裸机AMP继续 平台工具:zcu106,vitis2020.2,petalinux2019.2 文章目录1.cpu1跑裸机2.cpu0跑linux2.1petalinux设置2.2 app3.生成BOOT.bin4.zcu106测试 1.cpu1跑裸机 参照Zynq UltraScale+ MPSoC-双核裸机AMP建立的工程进行修改。BSP中stdin与out修改为uart1,uart1给裸机用,uart0给linux用。 ddr空间裸机与linu

zhuxl24的博客 5196

c++小游戏--打怪游戏(进度10%)

cout

yang21198的博客 426

原理图转PCB

本文讲述了原理图的编译、原理图转PCB的步骤和易错点。

m0_58083051的博客 3292

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1302

打怪闯关(monster)c++代码

cin>>n>>h;i<=n;i++)h-=a[i];if (h<=0)j<=i;j++)h+=maxai;j<=i;j++)a[j]=0;break;s++;h+=b[i];return 0;

m0_66980218的博客 892

EtherCAT主站教程3--适配伺服驱动器(模式配置)

目前通用的伺服驱动器的位置模式、速度模式以及其他模式是伺服系统中常见的控制模式,切换这些模式通常需要根据具体的伺服驱动器型号和控制协议(如EtherCAT、CANopen、Modbus等)进行配置。以下是这些模式的概述及切换方法的一般性指导:协议规范中,一共有以下几种模式:其中模式1、3、6对于比较常用,也更容易上手。

weixin_52626887的博客 794

C++打怪小游戏

【代码】C++打怪小游戏。

古文波 1026

YOLO26涨点改进 | YOLO联合Mamba火热发论文改进篇 | CVPR 2025 | 引入EfficientViM 新型轻量级视觉Mamba,高效捕捉全局依赖,含二次创新、适合目标检测任务

本文提出EfficientViM,一种基于HSM-SSD的新型轻量级视觉Mamba架构,用于改进YOLO26目标检测模型。该模块通过压缩隐藏状态、多阶段特征融合和内存优化设计,在降低计算复杂度的同时提升检测精度。实验表明,EfficientViM在ImageNet-1K上实现了最佳的速度-精度平衡,相比SHViT模型性能提升0.7%且速度更快。文章详细介绍了模块原理、网络结构、核心代码实现及YOLO26集成方法,提供两种改进方案,适用于资源受限环境下的实时目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 176

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

WW、forever的博客 2157

打怪兽问题

题目:一个游戏中有很多怪物(Monster),怪物之间可能要发生战斗(fight), 每场战斗都是一个怪物与另一怪物之间的一对一战斗。每个怪物都有自己 的速度(Speed)、生命值(hitpoint)、攻击力值(damage)和防御力值(defense); 战斗时,两个怪物依次攻击对方,即怪物a首先攻击怪物b, 然后轮到怪物b 攻击怪物a,之后,怪物a再次攻击怪物b,…,直到一方生命值为0

Super_pan 的专栏 3418

知识图谱-构建:知识图谱构建流程【本体构建、知识抽取(实体抽取、 关系抽取、属性抽取)、知识表示、知识融合、知识存储】

旅游领域的类是用来描述旅游的抽象化概念术语,是对众多旅游个体共性的概念化描述。术语是划分类的基础,根据构建领域本体的目标和具体需要,可以确定哪些术语能作为领域本体的类。在以上抽取的众多旅游领域术语中,有些是能直接作为类的,如旅游、人物、交通方式、景区等等,而有些则不能作为类,如票价、景区门票、联系方式等等,它们只是属性。“旅游”很明显是最顶层的类,是父类。然后,要确定旅游的子类,根据大众标签里体现的共性和《中国分类主题词表》确定了旅游领域的11个核心概念,即本体层次结构图数据属性(固有属性)...

u013250861的博客 4万+

并网逆变器的clark、park变换的C语言实现技巧

坐标变换,及c语言实现的讲解多如牛毛。 在此也做点整理,加入一根牛毛。偏重用什么样的C语言语法技巧实现这些变换来做双环控制的。 首先列些一下需要的C语言语法知识: 1、函数指针 指针是个变量,那么函数指针也是个变量。函数指针变量装的内容是一个函数的首地址。 函数指针的定义为:函数返回值类型 (* 指针变量名) (函数参数列表); 坐标变换过程中有许多变量,同时有数个函数,如果在C++中,这些东西我么你应该定义一个类,但是匝C语言中我们只能定义一个结构体组织这些...

blueoce的博客 3867

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 菜鸟玩算法·数据结构与算法·第3期·堆栈与队列
下一篇: 刷野打怪上王者·C++篇·第17期·数据操作处理
元宇宙MetaAI
博客等级 码龄10年 331粉丝 333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值