谈论C ++“方法”(相对于“成员函数”)有多错误?


19

了解,根据C ++规范,不存在“方法”之类的东西,并且一些(很多?大多数?)C ++程序员认为“方法”是一种Java主义。另一方面,即使在C ++论坛上,人们似乎也在谈论方法而不会抽搐。我正在寻找有关此术语的已知约定或惯例。

我正在记录同时具有C ++和Java版本的API。开发人员实际上将类和方法/成员函数的名称在两者之间保持相同,以方便移植和测试。因此,有关这些API的一些文档需要放在语言选择的“上方”。我需要能够大致讨论Foos和Bars及其baz()和mumble()...方法?

如果我谈论Java程序员会认为它很自然的方法,那么看来C ++程序员可能会理解,但是有些人会认为它是不正确的。我的问题是:令人发指这是怎么在实践中?相对于C ++特定的函数,通常如何在“通用OOP”上下文中谈论C ++成员函数?有没有更好的方式来讨论成员函数,而这两种语言都不对吗?(“成员函数”有点冗长。)

这不是意见调查;我正在尝试确定是否存在实际的约定通用做法来解决此问题。

我知道这个问题,但是它通常是关于OOP的,而不是关于特定语言的。


在询问之前,我确实阅读了帮助中心并查看了标签列表。我在这里问这个做错了吗?
Monica Cellio

您所拥有的接近票主要是基于意见,这很可能会是..不确定这在任何SE网站上的效果如何,只是因为很难权威地说出人们是否会激怒您以及他们会受到多大的骚动。一个人可能会认为这完全没问题,而另一个人会认为这是对术语的严重违反,正如您在Q中所描述的那样,因为这是相对仅作为一种意见的事情
Jimmy Hoffa,2015年

2
OOP方法的概念可以最清晰地映射到C ++中的“虚拟成员函数”,但这是一回事。Java方面的术语更糟,例如“静态方法”不是方法而是函数。只需继续使用与语言无关的单词“ method”,每个人都会明白您的意思。如果有人坚持认为C ++没有方法,那实际上是错误的,而且令人讨厌的自行车脱落。
阿蒙(Amon)

1
@JimmyHoffa更好吗?
Monica Cellio

3
只需在您的跨语言API文档中调用它们的方法即可。您可以在介绍性文字中添加一个短语,例如“为了使编程语言保持不可知性,此API文档将使用术语“方法”来引用C ++成员函数。”
布兰登2015年

Answers:


11

为什么不在文档的简介部分(例如“约定”部分)中包含解释(非常像您在问题中所做的那样)?然后,您可以解释说,文档中使用的“方法”一词在方法(Java),成员函数(C ++)等方面具有通用含义,因为该文档适用于所有实现。


这就是我所做的,到目前为止,人们似乎对此还不满意。谢谢你的建议。
Monica Cellio '16

15

好吧,您不会为此而执行。

C ++世界中的抱怨不是学究的正确性之一,而是模棱两可的问题之一。根据您所谈论的领域,荒野中存在着许多不同类型的“方法”,以至于我们中的许多人都倾向于使用标准术语,以避免以后产生误解。大致上,这意味着“静态/ [非静态] [纯]虚拟/ [非虚拟]成员/ [免费]功能”。

如果您改为在文档中编写“方法”,则某些C ++程序员可能会抱怨说您所谈论的内容并不清楚,或者担心如果您不熟悉 C ++约定,还会缺少哪些内容?

但是我敢肯定,有数百万的专业C ++程序员本身并不知道这是一回事。这是一个很大的世界。

您不会为此而执行。


3

Eiffel称它们为“ 例程功能”,C ++称它们为“ 成员函数”,以及(几乎)在整个计算历史中曾经创建的所有其他OO语言,在C ++称它们为“ Methods”之前和之后,因此,即使C ++(和Eiffel)程序员,除非他们真的从未听说过Simula,Smalltalk,Self,Objective-C,Newspeak,Java,C#,VB.NET,PHP,Python,Ruby,ECMAScript / JavaScript,Scala,CoffeeScript等...


唯一的要点是,在这些领域中,它们通常意味着不同的事物。这就是为什么OP询问坚持使用特定于域的术语是否更好,以及为什么正确的答案是“是”……
Lightness与Monica赛跑

刚刚意识到您通过引用JavaScript证明了我的观点,JavaScript甚至没有类(它的OO是基于原型的)。那么,JavaScript方法又如何与其他方法相同?您声称的相互可理解性实际上并不存在。
与莫妮卡(Monica)进行的轻度比赛

基于原型的OOP没有区别。OOP基于对象通过消息进行通信(例如服务器向彼此发送请求)进行通信的概念,一种方法是指任何特定对象响应给定消息的方式(方法)。原型OO仅在方法的继承方式方面有所不同。与基于消息的(如Ruby)OOP和基于消息的(如Ruby)OOP以及是否具有较晚绑定或较早绑定相比,更大的不同之处。
索洛夫'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.