如何成为一个游戏制作人——第四章:面向对象编程语法(详细请自学)



前景概要:

这章有点长,主要介绍一下c++里面的类机制和多态。

 

本章概要:

1.什么是面向对象

2.C++中的面向对象

3.面向对象应该如何使用

4.C++中的多态继承

 

一.什么是面向对象

首先我们要知道什么是面向过程。

不从很专业的角度来说,面向过程基本是就是,你要解决一个问题,然后一步步实现它,最多用函数来包装起来。然后再一个个调用就成了。

而什么是面向对象呢

面向对象有三个最基本的特性:

1.抽象(封装)

2.继承

3.多态

主要用于增加程序的——重用性——灵活性——扩展性

其实说的不专业一些,就是原来你要封装一条一条指令来编程。而是用面向对象的思想来编程的话,你就可以把一段代码抽象成一个更容易使人理解的东西。并且可以在建模(设计)期就把整个程序的框架设计好。

 

二.C++中的面向对象

打个比方,一个汉堡,它有好多种类。

我们可以定义一个结构体,来表示这个汉堡。

然后有多少种汉堡,我们就定义多少种结构体。

如下所示,我们有三个汉堡:

struct PorkHamburg

{

int money = 13;

string meat = "pig";

}

 

struct BaconHamburg

{

int money = 13;

string meat = "pig";

}

 

struct BeefHamburg

{

int money = 15

string meat = "cow"

}

于是我们定义了三个结构体来表示这三个汉堡。这个也有点面向对象的意味了,首先我们做到了面向对象的第一个特性——抽象,我们给一团数据赋予了一个意义。

但是如果我们有几百种汉堡,他们大多数属性都是一样的,比如说都是猪肉做的,但是每个汉堡还有其他配料怎么办呢。这样代码会写的非常非常长的。这时候面向对象的第二个特性就派上用场了。

*继承*

首先先介绍下c++继承的语法

class 对象名继承类型 要继承的对象

代码:

class me : piblic MyFather{}

这样我就继承了MyFather

 

依然和刚才一样,我们要做好多好多汉堡。这次汉堡的肉都是猪肉,但是配料却不一样。

这时候我们就可以使用面向对象方法来设计出我们的汉堡架构了。

 

首先我们先找到所有的汉堡的共同点,都是猪肉做的,价格都一样,不同的是配料。

 

class PigHamburg

{

public: //属性为公有

int money = 10;

string meat = pig

}

 

然后我们比方说有一块中国猪肉汉堡、一块美国猪肉汉堡。他们都是猪肉汉堡,只是配餐不一样。

class ChinesePigHambug : public PigHambug

{

//因为已经继承了PigHambug,中国猪肉汉堡已经有猪肉汉堡的所有特性了

string name = 中国猪肉汉堡

}

 

class AmericaPigHambug : public PigHambug

{

//因为已经继承了PigHambug 美国猪肉汉堡已经有猪肉汉堡的所有特性了

string name = 美国猪肉汉堡

}

 

这个就是继承,把父类的东西继承到子类里去,代码复用率很高(但是,在很多设计模式中,都很忌讳用继承。更多的时候使用组合的方式)

 

三.面向对象该如何使用

恩,关于使用示例什么的,我觉得还是通过代码示例来解释更清楚一些。

在此之前。关于面向对象的哲学什么的还是不说了。

 

 

//老师和小明都继承了敌人

 

#include 

#include 

 

using namespace std;

 

class Enemy

{

public:

Enemy(){}{}

float hp = 100;

float attack = 100;

float speed = 100;

};

 

class Teacher : public Enemy

{

public:

Teacher(){}

};

 

class Xiaoming : public Enemy

{

public:

Xiaoming(){}

};

 

//老师和小明都继承了敌人

 

int main()

{

Teacher *hehe = new Teacher;

cout<<"hehe hp = "<

 

四.C++中的多态继承 (详细概念请翻阅<>

 


#include 

#include 

 

using namespace std;

 

class Enemy

{

public:

Enemy(){}{}

float hp = 100;

float attack = 100;

float speed = 100;

};

 

class Teacher : public Enemy

{

public:

Teacher(){}

};

 

class Xiaoming : public Enemy

{

public:

Xiaoming(){}

};

 

//老师和小明都继承了敌人

 

void printSth(Enemy * point) //这里用了多态继承,自己动脑经。

{

cout<<"hp = "<hp;

cout<<"attack = "<attack;

cout<<"speed = "<speed;

}

 

int main()

{

Teacher *hehe = new Teacher;

printSth(hehe)

Xiaoming *haha = new Xiaoming;

printSth(haha)

//可以见到,他们都继承了敌人的所有属性

return 0;

}

 

结尾:

果断不详细写语法了。

感觉要是写的不准确还会被喷。

只讲一些概念上的问题。和一些代码示例。

请谅解。

你可能感兴趣的:(教程)