1: #ifndef _BASEGAME_H
2: #define _BASEGAME_H
3:
4: namespace WuguiEngine
5: {
6: //前置声明
7: class IUpdatable;
8:
9: //前置声明
10: namespace Graphics
11: {
12: class GraphicsDevice;
13: }
14:
15: //前置声明
16: namespace Core
17: {
18: class TimeUsed;
19: }
20:
21: //简化的写法,GraphicsDevice可以在下面的代码中直接使用
22: //GraphicsDevice与WuguiEngine::Graphics::GraphicsDevice等价
23: //注意:如果不加上下面这行,WuguiEngine::Graphics不能省略
24: using Graphics::GraphicsDevice;
25:
26: class BaseGame : virtual public IDisposed,
27: virtual public IRenderable
28: {
29: // add definition
30: }
31: }
32:
33: #endif
上面的代码简单的说明了namespace的一些基本的用法,该段代码取自BaseGame.H的文件,在class BaseGame中,用到了来自不同的命名空间下的IUpdatable, GraphicsDevice等类.具体的内容可以先看看代码里面的注释
在需要在BaseGame.H中包含这些类的头文件的同时,需要加上这些类的前置声明,如果不加会出现一些诡异的编译错误(有些问题可能也是在于我比较不了解c++),反正我觉得使用using namespace ...并不是一个很好的做法,不如using XXX::YYY::ZZZ来得准确(这里也希望高手来拍砖指点一下.
3.继承
1)virtual继承
在继承接口(只具有纯虚函数的类)的时候最好为继承的方法加上virtual的说明(参考上面一段的代码,IUpdatable与IDisposed就是接口,主要的原因是在于c++的多重继承机制,假如A与B都继承自IInterface,C又继承自A,B,那么普通的继承方式则会在C类中保存两个IInterface的副本.
而virtual继承就有区别了,virutal继承告诉编译器:"我继承的是一个纯接口!",这样只会保存一个副本.
2)多种继承方式
大家知道,C++对于继承的方式有很多的修饰,有public, private, protected,而且还可以加入virtual关键字.在c++中,public继承与在c#中的继承是没有区别的,而其他几种继承是具有理论的价值,而实际中的应用得非常非常的少,这里就不再赘述了.
3)实验:重写虚函数