c++ - C++中的抽象类是抽象的意思吗?

标签 c++

许多教程将抽象列为 C++ 的 4 条基本原则之一(其余 3 条为封装、继承和多态)。我试图理解抽象的概念。网上很多教程都说抽象是一种隐藏实现细节,只提供接口(interface)的概念。我没有清楚地理解这一点。我不明白我们在隐藏什么。这是在谈论隐藏函数使用的内部结构吗?如果是这样的话,即使是普通的 C 函数也会这样做。当我和我的一位同事谈论这个时,他告诉抽象类是抽象的最好例子。但我也不明白这一点。因为当我们有纯虚函数时,我们不能创建类的实例,而且纯虚函数大多没有定义。所以在这种情况下没有隐藏的概念。任何人都可以用示例解释 C++ 中的抽象吗?

最佳答案

您应该区分作为抽象类的语言构造和作为抽象的通用概念。

虽然抽象类可能是创建抽象的有用工具,但它不是必需的工具,使用该工具也不能保证您会获得(好的)抽象。

例如,在 C++ 标准中到处都有抽象,所以不需要再想出另一个例子。

以STL为例。有许多不同类型的容器,但例如,有些序列都符合在其上定义的一组通用函数,此外,根据您选择的操作,不同操作的复杂性有保证。这里的抽象是,这些是你可以用来存储数据的顺序容器。虽然它们不使用虚函数,但实现因实现而异(或者至少可能会有所不同),但如果你根据规范实际实现对程序员来说并不重要(而且大多数情况下,程序员不会深入研究实际实现)。

规范中的另一个抽象是语言本身,其中规定的执行环境和翻译过程。这些部分不是根据它们的实现方式来指定的,而是根据预期的行为来指定的。例如,通常一个实现会通过将局部变量放在处理器堆栈上来实现局部变量,但这是 C++ 规范遗漏的实现细节。该规范提出了一些关于执行行为的假设。并且您使用这些假设构建您的程序,而不是假设需要以特定的具体方式完成实现。

关于c++ - C++中的抽象类是抽象的意思吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35007521/

相关文章:

c++ - 在 C++ 中写入不可靠的磁盘时引发 I/O 错误

c++ - 像 printf 函数一样构建字符串

c++ - Cmake 无法识别 MSVC 编译器

c++ - 在 C++ 中扩展后将 header 绑定(bind)到实现

c++ - 学习如何使用 UML

c++ - panic : Failed to load dbcapi. dll:

c++ - 在 CRichEditCtrl MFC 中按下按键后替换字符

c++ - 如何从 vectors vector 中删除一个元素?

c++ - Borland C++ Typecast overrides - 为什么歧义?

c++ - 在 C++ 中将来自 2 个不同源的数据复制并组合到 1 个目标