了解C++中的抽象

127 阅读3分钟

了解C++中的抽象

抽象是指在不包括背景细节的情况下表示基本特征的行为。Data abstraction ,只向外部环境提供关于数据的关键事实,而隐藏背景的具体细节或解释。在C++中,类提供了一个很大的数据抽象水平。

简介

它们向外部环境暴露了足够多的公共方法,以允许用户对对象的功能进行实验并操纵其数据。

例如,在不认识类的内部实现方式的情况下,一个状态。例如,pow() 函数,在不了解它所使用的算法的情况下,被用来测量一个数字的幂。

在现实中,排序函数的底层功能可以在库的不同版本之间改变。只要接口保持不变,你的函数调用仍会运行。

本文将通过对抽象的介绍,以及类型和数据抽象是如何在C++中实现的。

前提条件

要学习这篇文章,你需要具备以下条件。

  • [Codeblocks IDE]来运行代码。
  • 对C++语言有一个基本的了解。

在C++语言中,有两种类型的抽象,即。

  1. 控制抽象--抽象实现的细节将始终隐藏在控制之下,不可见。
  2. 数据抽象--程序中关于数据的细节总是隐藏在数据抽象中。

对于我们自己的抽象数据类型的实现,我们可以使用类。对于数据流,我们使用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 ,它将存储从用户那里获得的半径值。之后,我们在类的公共部分声明了两个函数areacircumference

最后,在主函数中,我们创建了对象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

在上面的程序中,你可以看到我们不被允许直接访问变量xy 。但是你可以调用set() 函数来设置值xy 。调用display() 函数来显示值xy

数据抽象的优点

  • 它可以防止用户编写低级别的代码。
  • 它可以防止软件的重复,增加可重用性。
  • 内部类的实现可以被改变而不影响到用户。
  • 它有助于提高应用程序或程序的隐私性,因为用户只看到相关信息。

结论

数据抽象的原则,允许开发者只提供重要的数据。避免了对数据的背景细节的访问。它被用于依赖于代码的实现和接口的隔离的方法中。我相信你觉得这篇文章很直观,对你未来的程序有很大帮助。