如何成为一个游戏制作人——第四章:面向对象编程语法(详细请自学<<C++ Primer>>)
2014-05-17 00:50
375 查看
前景概要:
这章有点长,主要介绍一下c++里面的类机制和多态。
本章概要:
1.什么是面向对象
2.C++中的面向对象
3.面向对象应该如何使用
4.C++中的多态继承
一.什么是面向对象
首先我们要知道什么是面向过程。
不从很专业的角度来说,面向过程基本是就是,你要解决一个问题,然后一步步实现它,最多用函数来包装起来。然后再一个个调用就成了。
而什么是面向对象呢
面向对象有三个最基本的特性:
1.抽象(封装)
2.继承
3.多态
主要用于增加程序的——重用性——灵活性——扩展性
其实说的不专业一些,就是原来你要封装一条一条指令来编程。而是用面向对象的思想来编程的话,你就可以把一段代码抽象成一个更容易使人理解的东西。并且可以在建模(设计)期就把整个程序的框架设计好。
二.C++中的面向对象
打个比方,一个汉堡,它有好多种类。
我们可以定义一个结构体,来表示这个汉堡。
然后有多少种汉堡,我们就定义多少种结构体。
如下所示,我们有三个汉堡:
于是我们定义了三个结构体来表示这三个汉堡。这个也有点面向对象的意味了,首先我们做到了面向对象的第一个特性——抽象,我们给一团数据赋予了一个意义。
但是如果我们有几百种汉堡,他们大多数属性都是一样的,比如说都是猪肉做的,但是每个汉堡还有其他配料怎么办呢。这样代码会写的非常非常长的。这时候面向对象的第二个特性就派上用场了。
*继承*
首先先介绍下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 = “美国猪肉汉堡”
}
这个就是继承,把父类的东西继承到子类里去,代码复用率很高(但是,在很多设计模式中,都很忌讳用继承。更多的时候使用组合的方式)
三.面向对象该如何使用
恩,关于使用示例什么的,我觉得还是通过代码示例来解释更清楚一些。
在此之前。关于面向对象的哲学什么的还是不说了。
//老师和小明都继承了敌人
四.C++中的多态继承 (详细概念请翻阅<<C++ Primer>>
结尾:
果断不详细写语法了。
感觉要是写的不准确还会被喷。
只讲一些概念上的问题。和一些代码示例。
请谅解。
前景概要:
这章有点长,主要介绍一下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; }
结尾:
果断不详细写语法了。
感觉要是写的不准确还会被喷。
只讲一些概念上的问题。和一些代码示例。
请谅解。
相关文章推荐
- 如何成为一个游戏制作人——第三章:过程式编程语法(详细请自学<<C++Primer>>)
- <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”
- 【技术讨论】从弹弹堂说起,如何用2D物理引擎编写一个游戏&lt;一&gt;2011-11-05 10:36
- <cocos2d-x for wp7>使用cocos2d-x和BOX2D来制作一个BreakOut(打砖块)游戏(二)
- js如何验证日期是否有效<包括日期是否为空,是否符合格式2013-04-17,及是否是一个合法的日期>
- <MFC_8>2D游戏效果之五:一个跑酷游戏的小Demo
- python如何提取某一个固定的字符之间的数据如<img src= >" 内容"
- <<C++Primer PLus 第五版>>读书笔记3
- <如何创建一个实体历史> 时间维度 让 1:n的 产生新的实体 或者关系
- <MFC_8>2D游戏效果之五:一个跑酷游戏的小Demo
- <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”
- <<c++ primer>> 指向const对象指针&const指针
- <cocos2d-x for window phone>一个简单的打地鼠游戏
- <c++ primer>--第五部分 高级主题
- 如何让两个<div>在一个<div>里面并排
- 【技术讨论】从弹弹堂说起,如何用2D物理引擎编写一个游戏<一>2011-11-05 10:36
- 模版与泛型编程--<c++ primer>16章
- C++中输入输出<< 和>>重载,以便适应输出输入一个对象
- c++中#include <>与#include""的区别详细解析
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api