目录
OOP(面向对象编程)
区别
面向过程
面向对象
类
成员函数
类的作用域
类的大小
this指针
OOP(面向对象编程)
本质上是一种编程思想,通过把我们编程中遇到的事物抽象成对象来编程
区别
面向过程
struct hero { 英雄属性}
struct monster (怪物属性)
int act(hero &alex, monster& ghost)
{ghost.hp-=alex.act;return monster.hp;
}
这里通过act传入两个变量,通过计算,返回参数二的值,这是面向过程的,因为它主要聚焦于计算过程
面向对象
Alex.act(ghost)
这才是面向对象,意思就是alex攻击ghost,act属于Alex的方法,主要侧重于两个对象
类
语法
class 类名称
{private:私有int diamond;public:共有void init(){diamond=3;}
}
知识扩展*;类和结构体一样的,类就是结构体,唯一的区别:默认的访问权限不同,struct默认权限为公有(public),class默认权限为私有(private)
private:仅仅成员函数能够访问使用,其他都不能访问,自己也不能访问,这里将diamond初始化为3,其它地方都不能修改,很好的保护了diamond。
成员函数
类由属性和行为构成,属性就是成员变量,方法就是成员函数
类的作用域
类中的成员的作用域就是在这个类里面,如果想在外面访问类里面 的成员,就要通过类进行实例化,也就是声明一个变量,然后通过变量访问
class Role
{
public:int hp;void addhp(Role& r);void bigger(Role* r);
};
Role hero; 实例化一个变量
hero.hp=4;
class C
{};
void Role::addhp(Role& r)
{r.hp+=100
}
通过上面的知识,也可以把类的方法像上面这么写,加上作用域,在类中声明即可,为什么要声明呢?因为定义一个类,就像给了编译器一张图纸,要让编译器知道有这个函数。
类的大小
类的方法不占类的内存空间,它编译时放在了其他的内存地方。用sizeof求一下Role的大小
发现是4字节
空类的大小
上面的空类C大小为1字节,因为假设我们声明一个两个C的类变量,C1和C2,如果不给他们内存空间,就不能区分它们,所以编译器给它一个1字节的空间
this指针
Role* Role::bigger(Role* r)
{return r->hp > ho ? r:this;
}
Role Hero;
Hero.hp=100;
Role Monster;
Hero.ho=200;
Hero.bigger(&Monster)
谁的方法就指向谁,就是谁的this指针