有人能简单解释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等纯面向对象语言中一样。