当我和朋友讨论时,我对这些概念感到困惑.
我朋友的意见是
1)抽象是关于纯虚函数.
2)接口不是成员函数,但接口是纯虚函数.
我发现在C++入门中,接口是那些支持数据类型的操作,所以成员函数是接口.
我的意见是
1)抽象是关于接口和实现的规范;
2)成员函数是接口.
那么有人可以为我澄清这些概念吗?
1)抽象,抽象数据类型和抽象类之间的区别.
2)接口和成员函数之间的区别.
3)抽象和封装之间的区别.
我认为你的主要问题是你和你的朋友正在使用"界面"这两个词的两个不同定义,所以你们两种方式都是正确的.
你在日常意义上使用"界面""定义与某种东西互操作",如"我的电脑与键盘之间的接口是USB"或"真空与墙壁电源之间的接口是一个"出口." 从这个意义上讲,是的,方法(甚至具体的方法)是接口,因为它们定义了一种与对象互操作的方式.这并不是说这不适用于软件 - 它是术语应用程序编程接口(API)中使用的"接口".
你的朋友在更具体的面向对象编程术语中使用"接口"的意思是"一个类可以选择保证它将支持的一个单独定义的操作集".这里,"接口"的定义特征是它没有自己的实现.通过提供接口定义的方法的实现,类应该支持接口.由于C++在这个意义上没有明确的接口概念,因此等效构造是一个只有纯虚函数的类(也就是抽象数据类型).
另一方面,"抽象"涉及很多事情,你们两个都是对的.一般意义上的抽象意味着能够专注于更高级别的概念而不是更低级别的细节.封装是一种抽象,因为它的目的是隐藏类方法的实现细节; 如果没有更改类定义,实现可以更改.纯虚函数(OO-jargon意义上的"接口")是另一种抽象类型,因为如果使用得当,它们不仅可以隐藏实现,还可以隐藏真正的底层对象类型; 只要两种类型都实现相同的接口,所使用的类型就可以改变.