當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。