有人能简单解释OOP环境中的方法与函数吗?
当前回答
函数和方法之间主要区别的非常一般的定义:
函数在类外部定义,而方法在类内部和类的一部分定义。
其他回答
让我们不要过于复杂化,这应该是一个非常简单的答案。方法和功能是一样的。当函数在类外部时,可以将其称为函数,当函数在一个类内部编写时,可以称其为方法。
在C++中,有时使用方法来反映类的成员函数的概念。然而,最近我在《C++编程语言第四版》一书中发现了一个声明,第586页“派生类”
虚函数有时称为方法。
这有点令人困惑,但他说,有时,C++创建者倾向于将方法视为可以在对象上调用的函数,并且可以表现为多态。
它们通常是可互换的,但方法通常指类内的子例程,函数通常指类外的子例程。例如,在Ruby中:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
在Java中,所有内容(包和导入语句除外)都必须在类中,人们几乎总是将它们称为“方法”。
在Object Pascal或C++等OO语言中,“方法”是与对象关联的函数。因此,例如,“狗”对象可能具有“吠叫”功能,这将被视为“方法”。相反,“StrLen”函数是独立的(它提供作为参数提供的字符串的长度)。因此,它只是一个“函数”。Javascript在技术上也是面向对象的,但与C++、C#或Pascal这样的成熟语言相比,它面临许多限制。尽管如此,这种区别仍然存在。
另外还有几个事实:C#是完全面向对象的,因此您无法创建独立的“函数”。在C#中,每个函数都绑定到一个对象,因此从技术上讲,都是一个“方法”。关键是,在C#中很少有人将它们称为“方法”-他们只是使用“函数”一词,因为没有任何真正的区别。
最后,为了让任何Pascal专家都不要跳到我这里,Pascal还区分了“函数”(返回值)和“过程”(不返回值)。C#并没有明确区分这一点,当然,您可以选择是否返回值。
我不是专家,但我知道:
函数是C语言术语,它指的是一段代码,函数名将是使用此函数的标识符。方法是OO术语,通常它在函数参数中有一个this指针。您不能像C那样调用这段代码,您需要使用对象来调用它。调用方法也不同。这里调用含义来查找这段代码的地址。C/C++,链接时间将使用函数符号来定位。目标-C不同。调用表示使用数据结构查找地址的C函数。这意味着在运行时一切都是已知的。