C++ 数据抽象的设计原理
如下关于C++的数据抽象的内容中的大部分是经过自己的思考后总结的,不一定是正确的,仅供参考!
数据抽象是什么
C++中,数据抽象是面向对象编程的一个重要机制,或者说,是一种重要的面向对象的编程思想,其设计程序的理念在于将程序的接口和程序的实现分离开来,即一般情况下只提供程序的接口这样的关键的信息——程序员只需要关注对象的行为和特性,而不必去关注其实现的相关的程序细节。这有点类似于函数,比如在C语言编程的过程中,将具备某一特定功能的一段底层代码封装为一个函数,使用的时候,只需要调用该函数即可,而不必去“理会”底层的代码。
C++的数据抽象一般是通过类来实现的,因为类比函数的封装更彻底,不但可以封装函数,也可以将变量封装成为类成员。
至此,便可以举个更生活化的更“面向对象”的例子:C++的数据抽象就像智能手机,普通用户只需要知道如何开机、拨打电话、如何下载APP、打开APP、使用APP等一系列操作即可,而不需要去知道这些功能是如何实现的。
C++数据抽象设计原理
鄙人参考了几方面的资料,将其总结如下:
- 首先,C++中一般是通过类的定义来实现数据抽象;
- 其次,在类的定义的过程中,一般将需要被隐藏的成员定义为类的不能直接访问和修改的私有成员(比如手机桌面上的APP——用户可以操作,但一般不可直接修改——比如点击微信却打开了QQ),然后将访问和操作私有成员的接口(外露的接口)定义为公有成员函数;
数据抽象实例代码
如下实例代码中,通过C++数据抽象简单设计了一个赛车加速的小游戏,注意,只非常简单、简陋地实现了一个加速的逻辑(如果您有游戏开发的经验,不管是2d的还是3d的,也不管是C++的还是H5的,是Python的,还是C#的,等等,那么应该就可以更好理解Sprite中的运动逻辑的实现是怎么一回事,及其重要性)。其中,将操作和访问私有成员(赛车速度)的接口与该私有成员分离开来:
#include <iostream>
using namespace std;
class RacingCar{
public:
// 构造函数
RacingCar(int speed=0){
speed = speed;
}
// 对外的接口,访问私有成员speed
void getSpeed(){
cout << speed << endl;
}
// 对外接口,操作私有成员speed
void setSpeed(){
speed++;
}
private:
// 隐藏的信息
int speed;
};
int main(){
RacingCar rc(1);
rc.getSpeed();
rc.setSpeed();
rc.getSpeed();
rc.setSpeed();
rc.getSpeed();
return 0;
}
代码运行后,得到输出值为:
0
1
2
免责声明:内容仅供参考,不保证正确性。