有人能简单解释OOP环境中的方法与函数吗?
当前回答
从历史上看,“方法”是不返回值的东西,而“函数”是返回值的,这两者之间可能存在着微妙的区别。每种语言都有自己的具有特殊含义的词汇。
在“C”中,“函数”一词表示程序例程。
在Java中,术语“函数”没有任何特殊含义。而“方法”是指构成类实现的例程之一。
在C#中,这可以翻译为:
public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function
但实际上,我再次重申,这两个概念实际上没有什么不同。如果你在关于Java的非正式讨论中使用“函数”一词,人们会认为你的意思是“方法”并继续下去。不要在有关Java的适当文档或演示中使用它,否则你会看起来很傻。
其他回答
函数或方法是一段命名的可调用代码,它执行一些操作并可选地返回一个值。
在C语言中,使用术语“函数”。Java和C#的人会说它是一个方法(在这种情况下,函数是在类/对象中定义的)。
C++程序员可能会将其称为函数或有时称为方法(取决于他们是在编写过程式C++代码还是以面向对象的方式使用C++,而且只有C/C++的程序员可能会称其为函数,因为C/C++文献中很少使用术语“方法”)。
你只需调用函数的名称,
result = mySum(num1, num2);
您可以通过首先引用其对象来调用方法,
result = MyCalc.mySum(num1,num2);
“method”是“function”的面向对象词。这几乎就是它的全部(即,没有真正的区别)。
不幸的是,我认为这里的很多答案都在延续或推进一种观点,即存在一些复杂而有意义的差异。
真的-没有那么多,只是对同一件事用不同的词。
[后期添加]
事实上,正如BrianNeal在对这个问题的评论中指出的那样,C++标准在引用成员函数时从不使用“方法”一词。有些人可能认为这表明C++并不是真正的面向对象语言;然而,我更倾向于将其作为一种迹象,即一群相当聪明的人并不认为有特别强烈的理由使用不同的术语。
函数是主要属于面向过程编程的概念,其中函数是一个可以处理数据并返回值的实体
方法是面向对象编程的概念,其中方法是类的成员,该类主要对类成员进行处理。
只需两个字:非静态(“instance”)方法将一个隐藏指针指向“this”(作为其第一个参数),该对象就是您调用该方法的对象。
这是与常规独立函数的唯一区别,尽管是动态调度。
如果您感兴趣,请阅读以下详细信息。
我将尽量简短,并将使用C++作为示例,尽管我所说的几乎可以应用于每种语言。
对于您的CPU来说,函数和方法都只是一段代码。时期因此,当调用函数/方法时参数
好吧,我说过没有实际的区别。让我们再深入一点:
有两种类型的方法:静态和非静态静态方法类似于常规函数,但在类内部声明,该类的作用仅类似于命名空间非静态(“instance”)方法采用指向“this”的隐藏指针。这是与常规独立函数的唯一区别。
撇开动态调度不谈,这意味着它非常简单:
class User {
public string name; // I made it public intentionally
// Each instance method takes a hidden reference to "this"
public void printName(/*User & this*/) {
cout << this.name << endl;
}
};
相当于
public getName(User & user) {
// No syntactic sugar, passing a reference explicitly
cout << user.name << endl;
}
因此,本质上,user->printName()只是getName(user)的语法糖。
如果不使用动态调度,仅此而已。如果使用了它,那么它就有点复杂了,但是编译器仍然会发出一个看起来像函数的东西,将其作为第一个参数。
方法和功能之间有明显的区别:
函数是一段独立的代码,您可以在任何地方调用它,只需在给定的参数中提及它的名称,就像在大多数过程语言(如C++和python)中一样。虽然
方法与对象具体相关,这意味着您只能在调用方法之前使用点(.)符号提及它的对象,就像在C#和java等纯面向对象语言中一样。