目录
OOP
通过一个游戏怪物攻击人物的过程理解面向对象编程
使用结构体引入多态问题
#include <iostream>
struct NPC//三个属性
{
int hp;
int mp;
int damage;
};
struct MONSTER
{
int hp;
int mp;
int damage;
int price;
};
struct ROLE
{
int hp;
int mp;
int damage;
int diamond;
};
/*三个结构体【NPC】【ROLE】【MONSTER】
有三个相同的成员变量,
如果不访问其不共有的成员变量的话,
可以更改形参的类型
ROLE和ROLE的pk修改成NPC和NPC的pk
*/
/*
bool Act(ROLE* acter, ROLE* beacter)
{
beacter->hp -= acter->damage;
return beacter->hp > 0;
}
*/
/*将上面的Act代码修改成下面的Act代码,修改形参类型,可以减少代码量*/
bool Act(NPC* acter, NPC* beacter)
{
beacter->hp -= acter->damage;
return beacter->hp > 0;
}
int main()
{
MONSTER atm{ 1000,500,50,6000 };
ROLE zs{ 1000,1000,50,1000 };
ROLE ls{ 1000,500,100,6000 };
Act((NPC*)&zs, (NPC*)&ls);//通过强制类型转换,来适应新的Act函数
std::cout << ls.hp << std::endl;
}
定义类
其实struct内也可以写函数,如下:
struct ROLE
{
int hp;
int mp;
int damage;
int diamond;
bool Act1(ROLE* acter, ROLE* beacter)
{
beacter->hp -= acter->damage;
return beacter->hp > 0;
}
};
成员函数
查看一个对象的占内存大小
声明两个空类
inline成员函数
this指针
引用和this指针的用处
使用引用,提高效率,减少了复制
#include "Role.h"
void Role::Act(Role& role)
{
hp = 2;
role.hp -= damage;
}
void Role::Init()
{
hpRecover = 3;
}
Role* Role::bigger(Role* role)
{
return this->lv > role->lv ? this : role;
}
Role& Role::SetLv(int newLv)
{
lv = newLv;
return *this;
}
Role& Role::SetHp(int newHp)
{
hp = newHp;
return *this;
}
Role& Role::SetDamage(int newDamage)
{
damage = newDamage;
return *this;
}
#include <iostream>
#include "Role.h"
int main()
{
Role user;
Role monster;
user.SetLv(100).SetDamage(10000).SetHp(1000);
}