您的位置:首页 > 编程语言 > C语言/C++

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

2014-05-17 00:50 375 查看


前景概要:
这章有点长,主要介绍一下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 <iostream>

#include <string>

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 = "<<hehe.hp;

cout<<"hehe attack = "<<hehe.attack;

cout<<"hehe speed = "<<hehe.speed;

Xiaoming *haha = new Xiaoming;

cout<<"hehe hp = "<<haha.hp;

cout<<"hehe attack = "<<haha.attack;

cout<<"hehe speed = "<<haha.speed;

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

return 0;

}


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

#include <string>

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 = "<<point->hp;

cout<<"attack = "<<point->attack;

cout<<"speed = "<<point->speed;

}

int main()

{

Teacher *hehe = new Teacher;

printSth(hehe)

Xiaoming *haha = new Xiaoming;

printSth(haha)

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

return 0;

}


结尾:
果断不详细写语法了。
感觉要是写的不准确还会被喷。
只讲一些概念上的问题。和一些代码示例。
请谅解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐