C++ 数据抽象
- 数据抽象是一种将必要的细节提供给外界并隐藏内部细节的过程,即仅在程序中表示必要的细节。
- 数据抽象是一种基于程序的接口和实现细节的分离的编程技术。
- 我们以真实生活中的空调为例,空调可以打开或关闭,改变温度,改变模式和其他外部组件(如风扇,摇摆)。但是,我们不知道空调的内部细节,即它的内部工作原理。因此,我们可以说空调将实现细节与外部接口分离。
- C++提供了很高的抽象级别。例如,pow()函数用于计算一个数的幂,而不需要知道函数遵循的算法。
如果在C++程序中使用私有和公共成员实现类,则这是数据抽象的一个示例。
数据抽象可以通过两种方式实现:
- 使用类进行抽象
- 在头文件中进行抽象。
使用类进行抽象: 可以使用类来实现抽象。通过使用访问修饰符,类用于将所有数据成员和成员函数组合成一个单元。类负责确定哪些数据成员可以在外部可见,哪些不可以。
在头文件中进行抽象: 另一种类型的抽象是头文件。例如,可以使用可用的pow()函数来计算一个数的幂,而不用知道函数使用的算法。因此,我们可以说头文件隐藏了所有的实现细节,使用户无法看到。
访问修饰符实现抽象:
- 公有修饰符: 当成员声明为公有时,成员可以在程序的任何地方访问。
- 私有修饰符: 当成员声明为私有时,成员只能由类的成员函数访问。
让我们看一个简单的抽象在头文件中的例子。
// 计算一个数的幂的程序。
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int n = 4;
int power = 3;
int result = pow(n,power); // pow(n,power) is the power function
std::cout << "Cube of n is : " <<result<< std::endl;
return 0;
}
输出:
Cube of n is : 64
在上面的例子中,pow()函数用于计算4的3次方。 pow()函数在math.h头文件中,其中包含了pow()函数的所有实现细节。 让我们通过类来看一个简单的数据抽象例子。
#include <iostream>
using namespace std;
class Sum
{
private: int x, y, z; // private variables
public:
void add()
{
cout<<"Enter two numbers: ";
cin>>x>>y;
z= x+y;
cout<<"Sum of two number is: "<<z<<endl;
}
};
int main()
{
Sum sm;
sm.add();
return 0;
}
输出:
Enter two numbers:
3
6
Sum of two number is: 9
在上面的例子中,使用类实现了抽象。类’Sum’包含了私有成员x、y和z,只能由类的成员函数访问。
抽象的优势
- 类的实现细节对于无意中的用户级错误是受保护的。
- 程序员不需要编写低级代码。
- 数据抽象避免了代码重复,即程序员不必每次执行相似操作时都进行相同的任务。
- 数据抽象的主要目的是重用代码和正确地将代码分割在各个类中。
- 内部实现可以更改而不影响用户级别的代码。