了解C++中的抽象
抽象是指在不包括背景细节的情况下表示基本特征的行为。Data abstraction ,只向外部环境提供关于数据的关键事实,而隐藏背景的具体细节或解释。在C++中,类提供了一个很大的数据抽象水平。
简介
它们向外部环境暴露了足够多的公共方法,以允许用户对对象的功能进行实验并操纵其数据。
例如,在不认识类的内部实现方式的情况下,一个状态。例如,pow() 函数,在不了解它所使用的算法的情况下,被用来测量一个数字的幂。
在现实中,排序函数的底层功能可以在库的不同版本之间改变。只要接口保持不变,你的函数调用仍会运行。
本文将通过对抽象的介绍,以及类型和数据抽象是如何在C++中实现的。
前提条件
要学习这篇文章,你需要具备以下条件。
- [Codeblocks IDE]来运行代码。
- 对C++语言有一个基本的了解。
在C++语言中,有两种类型的抽象,即。
- 控制抽象--抽象实现的细节将始终隐藏在控制之下,不可见。
- 数据抽象--程序中关于数据的细节总是隐藏在数据抽象中。
对于我们自己的抽象数据类型的实现,我们可以使用类。对于数据流,我们使用cout对象,它属于output stream class 。
我们可以使用权限标签/访问指定器(protected, private, and public)来隐藏或公开它们。通过将数据成员声明为私有或受保护,我们可以防止从程序外访问它。
策略设计
抽象将代码分割成实现和接口。在设计时,保持接口独立于实现[,这样即使底层实现发生变化,接口也不会改变]。
C++中抽象化的例子
我们可以看看如何在C++编程语言中使用类、头文件和指定器来促进数据抽象化,如下。
例子1
使用类,我们可以在C++中实现数据的抽象化。类允许人们使用可用的权限标签对数据成员和成员函数进行分组。一个类将决定哪些数据成员可以在该类之外访问,哪些不可以。
用类来说明数据抽象的程序。
#include <iostream>
#define PI 3.142
using namespace std;
// declaring class
class circle
{
private :
float radius; // private variables radius
public :
// function to get value of radius from the user
void get_radius(void)
{
cout<<"Enter radius of circle"<<endl;
cin>>radius;
}
// declaring function to calculate area of the circle
float area(void)
{
return(PI*radius*radius);
}
// declaring function to calculate circumference of the circle
float circumference(void)
{
return(PI*2*radius);
}
};
//implementation of the class
int main ()
{
// creating object of declared class
circle c;
c.get_radius();
cout << " AREA = " << c.area() << endl ;
cout << " CIRCUMFERENCE = " << c.circumference() << endl ;
return 0 ;
}
输出。
AREA = 50.272
CIRCUMFERENCE = 25.136
在上面的程序中,我们已经声明了类circle 。在这个类中,我们创建了一个变量radius ,它将存储从用户那里获得的半径值。之后,我们在类的公共部分声明了两个函数area 和circumference 。
最后,在主函数中,我们创建了对象c,它属于circle 类。我们用这个对象来调用面积和周长函数来显示圆的面积和周长。
例2
在C++中,头文件可以是另一种形式的抽象。例如,考虑到math.h 的头文件中存在的pow() 方法。
我们基本上使用math.h 头文件中的pow() 函数。然后我们将数字作为参数进行转移。我们在不了解支撑它的算法的情况下计算出一个数字的幂。
用头文件来说明数据抽象的程序。
#include <iostream>
#include <math.h>
using namespace std ;
int main ()
{
int a = 5 ;
int power = 2 ;
int result = pow ( a , power ) ;// pow(n,power) is the power function to calculate power
cout << " Square of a = " << result << std::endl ;
return 0 ;
}
输出。
The square of a is : 25
在上面的程序中,我们使用了头文件math.h ,将c++语言提供的预定义数学函数纳入我们的代码中。
在我们的程序中,我们有三个整数变量。x,power, 和result 。之后,我们用std::cout 来计算给定数字的平方,并将其存入我们声明的整数结果中。
例三
在C++中实现抽象化的核心原则是权限标签,它决定了程序中数据的访问方式。为了对一个类的数据成员施加限制,我们可以使用如下的权限标签。
- 公有--声明为公有的数据成员和成员函数[可以从该类可见的任何地方被访问]。
- Private - 声明为private的数据成员和成员函数[只能在类内访问]。在类的外部,它们是不可访问的。
- 受保护的 - 数据成员和成员函数[只能被他们的朋友类和派生类访问]。
使用上述由权限标签给出的方面,我们可以实现抽象化。比如,在一个类中,决定内部实现的成员可以被归类为私有。
而可以将需要提供给外部世界的基本细节标记为公共的。这些公共成员可以访问私有成员,因为他们是该类的成员。
用权限标签来说明抽象的程序。
#include <iostream>
using namespace std;
class abstraction
{
private:
int x, y;
public:
// method to set values of
// private members
void set(int m, int n)
{
x = m;
y = n;
}
void display()
{
cout<<"x = " <<x << endl;
cout<<"y = " << y << endl;
}
};
int main()
{
abstraction sp;
sp.set(20, 30);
sp.display();
return 0;
}
输出。
Sum = 95
在上面的程序中,你可以看到我们不被允许直接访问变量x 和y 。但是你可以调用set() 函数来设置值x 和y 。调用display() 函数来显示值x 和y 。
数据抽象的优点
- 它可以防止用户编写低级别的代码。
- 它可以防止软件的重复,增加可重用性。
- 内部类的实现可以被改变而不影响到用户。
- 它有助于提高应用程序或程序的隐私性,因为用户只看到相关信息。
结论
数据抽象的原则,允许开发者只提供重要的数据。避免了对数据的背景细节的访问。它被用于依赖于代码的实现和接口的隔离的方法中。我相信你觉得这篇文章很直观,对你未来的程序有很大帮助。