C++中抽象和封装的区别
1. 抽象:
在面向对象编程中,抽象是获取信息的方法,所需的信息将以最简单的方式获取,即只提取所需的组件,而那些被认为不太重要的组件也不会被注意到。抽象的概念只向用户显示必要的信息。它通过隐藏程序的实现复杂性来降低程序的复杂性。
抽象的例子:
#include <iostream>
using namespace std;
class YiibaiCom {
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()
{
YiibaiDemo s;
s.sum(5, 4);
return 0;
}
运行结果:
Sum of the two number is: 9
在这个例子中,可以看到抽象是通过使用类来实现的。 Yiibai.Com
类包含私有成员 a
、 b
和 c
,它们只能由该类的成员函数访问。
2. 封装:
封装是包含信息的过程或方法。封装是一种将数据隐藏在单个实体或单元中的方法,以及一种保护信息免受外界影响的方法。该方法将数据和函数一起封装在一个类中,这也导致了数据抽象。
封装示例:
#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()
已经绑定在一起了,只不过是封装而已。
抽象与封装的区别:
编号 | 抽象 | 封装 |
---|---|---|
1 | 抽象是获取信息的过程或方法。 | 封装是包含信息的过程或方法。 |
2 | 在抽象中,问题在设计或接口级别得到解决。 | 在封装中,问题在实现层面得到解决。 |
3 | 抽象是隐藏不需要的信息的方法。 | 封装是一种将数据隐藏在单个实体或单元中的方法,以及一种保护信息免受外部影响的方法。 |
4 | 可以使用抽象类和接口来实现抽象。 | 封装可以通过访问修饰符来实现,即私有、受保护和公共。 |
5 | 在抽象中,使用抽象类和接口隐藏了实现的复杂性。 | 在封装中,使用 getter 和 setter 方法隐藏数据。 |
6 | 封装有助于执行抽象的对象。 | 导致封装的对象不需要被抽象。 |