当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ Abstraction和Encapsulation的区别用法及代码示例


抽象:
在面向对象编程中,抽象是一种获取信息的方法,其中所需的信息将以最简单的方式获取,仅提取所需的组件,并且那些被认为不太重要的组件也不会被注意到。抽象的概念只向用户展示必要的信息。它通过隐藏程序的实现复杂度来降低程序的复杂度。
抽象的例子:

CPP


#include <iostream>
using namespace std;
class Summation {
private:
    // private variables
    int a, b, c; 
public:
    void sum(int x, int y)
    {
        a = x;
        b = y;
        c = a + b;
        cout<<"Sum of the two number is : "<<c<<endl;
    }
};
int main()
{
    Summation s;
    s.sum(5, 4);
    return 0;
}

输出:

Sum of the two number is: 9 

在这个例子中,我们可以看到抽象是通过类来实现的。 “Summation”类拥有私有成员 a、b 和 c,它们只能由该类的成员函数访问。
封装:
封装是包含信息的过程或方法。封装是一种将数据隐藏在单个实体或单元中的方法,也是一种保护信息免受外界影响的方法。此方法将数据和函数一起封装在一个类中,这也导致了数据抽象。
封装示例:

CPP


#include <iostream>
using namespace std;
class EncapsulationExample {
private:
    // we declare a as private to hide it from outside
    int a; 
public:
    // set() function to set the value of  a
    void set(int x) 
    {
        a = x;
    }
    // get() function to return the value of a
    int get() 
    {
        return a;
    }
};
// main function
int main() 
{
    EncapsulationExample e1;
    e1.set(10);
    cout<<e1.get();
    return 0;
}

输出:

10

在此程序中,变量 a 被设为私有,以便只能使用类中存在的方法 get() 和 set() 来访问和操作该变量。因此我们可以说,变量a和方法set()以及get()绑定在一起,只是一种封装。
抽象和封装之间的区别:

S.NO 抽象 封装
1. 抽象是获取信息的过程或方法。 而封装是包含信息的过程或方法。
2. 抽象地说,问题是在设计或接口级别解决的。 而在封装中,问题是在实现层面解决的。
3. 抽象是隐藏不需要的信息的方法。 而封装是将数据隐藏在单个实体或单元中的方法以及保护信息免受外部影响的方法。
4. 我们可以使用抽象类和接口来实现抽象。 而封装可以通过访问修饰符来实现,即私有、受保护和公共。
5. 在抽象中,使用抽象类和接口隐藏了实现的复杂性。 在封装时,使用 getter 和 setter 方法隐藏数据。
6. 有助于执行抽象的对象被封装。 而导致封装的对象不需要被抽象。


相关用法


注:本文由纯净天空筛选整理自MKS075大神的英文原创作品 Difference between Abstraction and Encapsulation in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。