什么是类,什么是对象?
类就是一类具有共同特征的群体
对象是这类群体的某一个具体的个体
上面的描述很迷,接下来我们通过一个游戏的例子来解释一下什么是类,什么是对象。
你现在玩王者荣耀克隆模式,假设十个亚瑟在对线,亚瑟这个英雄就可以说是一个类,而你操作的那个亚瑟是独一无二的,是一个具体的对象。
类的特征—属性和方法
每一个类都有他的属性和方法,我们可以看看亚瑟的属性和方法
亚瑟:
属性:
{
生命
物攻
法强
物抗
法抗
敏捷
//就举例这么多,游戏属性太多了,不说明太多
}
方法: //方法就是能做什么,在游戏里面就是技能
{
1技能:誓约之盾
2技能:回旋打击
3技能:圣剑裁决
}
这就是类
而你玩的那个亚瑟,,是一个对象,相当于把亚瑟这个类实例化成一个有你游戏名的一个具体的个体
c++中类对象的定义
说完了王者荣耀的亚瑟
我们来看看如果在c++中写一个亚瑟类,如何在c++中实例化一个亚瑟的对象
c++中用class定义一个类
class Yase
{
//属性
int hp;//生命
int wg;//物攻
int fq;//法强
int wk;//物抗
int fk;//法抗
int mj;//敏捷
//方法 //方法就是一个函数,让这个函数执行一些操作
void f1(){...};
void f2(){...};
void f3(){...};
};
tips:属性又称为数据成员,方法又称为成员函数
对象的实例化
c++中实例化一个对象有两种方法
1、从栈中实例化
Yase cheng;//cheng是我的游戏名称,在这里我把他当作一个变量存储实例化的对象
Yase heros[10];//实例化一个对象数组,就是一个数组里面有10个实例化的亚瑟对象
2、从堆中实例化
//new 关键字来创建一个对象
Yase *p = new Yase();//p是一个指针,指向一块内存,这块内存存储我创建的对象
Yase *q = new Yase[10];//申请一个对象数组
delete p;//从堆中实例化不会自动释放申请的内存,要自己手动释放
//delete []q;//对象数组要加中括号释放内存
对象的访问
实例化对象之后我们要进行操作
1、通过栈实例化对象的访问
先实例化一个亚瑟
Yase cheng;
cheng.hp = 300;
cheng.f1();
通过.来访问对象的属性和调用对象的方法
2、通过堆实例化对象的访问
同样先实例化一个亚瑟
Yase *p = new Yase();
p->hp = 300;
p->f1();
delete p;
p = NULL;
通过->访问对象的属性和调用对象的方法
面向对象的思想
c++的访问限定符—public、private、protected
public:公共的,外界可调用
private:私有的,外界不可调用,不可访问
所谓面向对象的思想就是以对象做什么表达程序的逻辑,反应在代码上就是对象调用函数去做一些事,对象所有行为都要通过调用函数完成,对象的属性(数据成员)
要用函数进行封装,不能直接访问。
class Yase
{
public:
void f1(){...};//1技能
void f2(){...};//2技能
void f3(){...}; //3技能
int getHp(){
return hp;
}
void setHp(int _hp){
hp = _hp;
}//这里只举hp的例子
private:
int hp;//生命
int wg;//物攻
int fq;//法强
int wk;//物抗
int fk;//法抗
int mj;//敏捷
};
面向对象的好处,可以对传入对象的参数进行限制,而且可以保证某些属性不给写只能读,就是只能get不能set
例如在setHp(_hp)里可以进行这样的修改
void setHp(int _hp){
if(_hp>=0 &&_hp<=100)
hp = _hp;
else
cout << "error" <<endl;
}