当前位置: 首页 > 知识库问答 >
问题:

非虚拟方法将用于什么目的?[副本]

艾哲
2023-03-14

就C的功能而言,使用非虚拟方法的目的是什么?通过对象句柄而不是对象类型来更改对象的方法有什么好处吗?我找到了很多关于如何使用虚拟方法的文章,但我找不到如何使用非虚拟方法。我所知道的其他语言,如Java、Ruby和Python,只有虚拟方法。所以功能上的非虚拟方法是不需要的,只是出于性能的原因?

好的。我没有读过标记为重复的文章。但你的答案对我来说仍然很有价值,因为它告诉了C的起源,并将C与其他面向对象语言进行了比较。谢谢大家回答。

共有3个答案

金昂熙
2023-03-14

如果它是非虚拟的,c方法查找机制将不允许多态。将类定义为非虚拟的可以防止开销和混乱。

看看这个问题和答案

刘弘济
2023-03-14

当将一个方法标记为虚拟时,每次调用这样的方法时,程序都必须检查您调用该方法的对象中的虚拟表,这称为动态调度。与使用静态调度解析的正常方法相比,它会产生一些开销。

由于C语言的很大一部分是让程序员选择他想做的事情,所以你可以选择是静态链接还是动态链接。

丌官远
2023-03-14

答案很简单:因为C不是Java。

编程语言有不同的哲学和实现相同结果的不同方法。

Java(和其他“OOP-language-where-every-object-is-GCed-is-a-reference-type”,如C#)鼓励您以非常具体的方式来考虑对象:继承和多边形是实现代码灵活性和通用性的主要方法。对象几乎总是引用类型,这意味着Carcar实际上可以指向ToyotaFord等等。对象被垃圾收集并动态分配。无论如何,所有对象都继承自一个<code>Object</code>类,因此继承和动态多态性无论如何都是通过语言设计渗透到语言对象中的。

c不一样。对象的概念可能是语言的核心,但是对象基本上是数据和功能的单位。它是“真正的”OOP语言对象的精简形式,通常在堆栈上分配,使用RAII来处理自己的资源,并且是值类型。

继承和多态是存在的,但它们不如组合和编译时多态(模板)。

C 不鼓励您将对象视为引用类型。对象可能是一种引用类型,它们可能有虚函数,但这只是在 C 中实现灵活性和泛化的一种方式,而不是 Java。你可以改用模板,函数指针和不透明类型(a-la C风格的多态性),继承覆盖函数(a-la Java风格),因此,C不会强迫你采取Java路线来实现灵活性 - 它让你有机会选择完成事情的最佳方式。

 类似资料:
  • 让我们在Visual C 2010中假设以下场景: 理论上,这个小应用程序的输出应该是: 基本:非虚拟显示。 基础:虚拟显示。 基本:非虚拟显示。 派生:虚拟显示。 因为基类的显示方法不是虚拟方法,所以派生类不能重写它。正当 问题是,当我运行应用程序时,它会打印以下内容: < li >基本:非虚拟显示。 < li >基本:虚拟显示。 < li >派生:非虚拟显示。 < li >派生:虚拟显示。 所

  • 问题内容: 我了解什么是Java方法调用,并使用它练习了很多示例。 我想知道这个概念的实际情况或需要。如果有人能给出使用它的真实场景,这将有很大帮助,如果没有这个概念,将会发生什么? 问题答案: 这是一个例子。假设我们有2个类别: 如果我们现在执行以下操作: 我们得到结果 如果Java没有,它将在编译时确定要调用的是属于该类的。既然不是,而是在运行时根据所指向的实际类来确定,则可以得到以上结果。

  • 问题内容: 我已经在某些计算机科学测试中看到了下一段,希望我能在这里对它的含义有一个很好的解释,因为我用它搜索了一个小时,却找不到任何东西。 “当我们说Java语言具有 虚拟方法调用时 ,是指在Java应用程序中,执行的方法由运行时的对象类型决定” 这是什么意思?谁能更好地解释它? 问题答案: 这些行的作者使用的C ++术语。 更好的术语是动态绑定/动态调度。 这意味着,对象的动态类型是“选择”将

  • “虚拟组”旨在提供一个按类别逻辑将对象分组的平台,以便使所有对象得到有效保存。它可以应用于连接、表、集合、视图、函数、索引、触发器、MapReduce、GridFS、备份、自动运行和模型。 【提示】vgroup.json 文件保存于配置文件位置。 如果你想隐藏组结构,选择“查看”->“导航窗格”->“隐藏连接组”和选择“查看”->“隐藏对象组”。 创建一个新的组 右击主窗口的导航窗格或对象选项卡并

  • “虚拟组”旨在提供一个按类别逻辑将对象分组的平台,以便使所有对象得到有效保存。它可以应用于连接、表、集合、视图、函数、索引、触发器、MapReduce、GridFS、备份、自动运行、模型和图表。 【提示】vgroup.json 文件保存于默认的路径,例如:~/Library/Application Support/PremiumSoft CyberTech/Navicat CC/Navicat P

  • “虚拟组”旨在提供一个按类别逻辑将对象分组的平台,以便使所有对象得到有效保存。它可以应用于连接、表、集合、视图、函数、索引、触发器、MapReduce、GridFS、备份、自动运行、模型和图表。 【提示】vgroup.json 文件保存于默认的路径,例如:/home/your_username/.config/navicat/Premium/Profiles。 如果你想隐藏组结构,选择“查看”->