Функция отчасти как статический метод?

Я - программист Java и пытаюсь понять различие между методом (методы Java) и функцией (такой как в C++). Я раньше думал, что они - то же, просто различные соглашения о присвоении имен для различных языков программирования. Но теперь, когда я знаю, что они не, я испытываю затруднения при понимании различия.

Я знаю, что метод касается экземпляра класса и имеет доступ к данным класса (членские переменные), в то время как функция не делает (?). Так функция отчасти как статический метод?

Посмотрите здесь для объяснений, которые я считал, который привел меня думать это.

7
задан Community 23 May 2017 в 11:55
поделиться

5 ответов

Функция - это просто общее имя для части кода в программе. Слово «метод» является синонимом функции. То же самое и с «подпрограммами», «процедурами» и т. Д.

Функции Java и C ++ по большей части являются одним и тем же.

Слово «метод» обычно используется для подпрограмм, связанных с экземпляром, в то время как «функция» обычно используется для тех, которые являются глобальными / статическими.

Но даже тогда «методы» генерируются компилятором, как если бы они были «функциями».

Рассмотрим этот код C ++:

class Foo
{
public:
    void DoFoo(int param)
    {
        printf("%d, %d\n", param, member);
    }
private:
    int member;
};

int main()
{
    Foo f;
    f.DoFoo(42);
    return 0;
}

Компилятор генерирует код, эквивалентный этому:

struct Foo
{
    int member;
};

void Foo_DoFoo(Foo* this, int param)
{
    printf("%d, %d\n", param, this->member);
}

int main()
{
    Foo f;
    Foo_DoFoo(&f, 42);
    return 0;
}

Итак, различие между «методом» и «функцией» - это просто соглашение.

4
ответ дан 7 December 2019 в 07:41
поделиться

В C все "функции" являются "верхним уровнем" в том смысле, что они не были связаны с типом. Если они были в вашей области видимости (например, через include), вы могли ссылаться на них, и они могли быть связаны.

В C++ вы можете создавать классы и помещать в них методы. Методы, помеченные как статические, вызываются через определенный класс, но не связаны с экземпляром класса. В этом смысле они похожи на функции. Однако им предоставляются некоторые привилегии, связанные с классом (например, их можно сделать приватными и получить доступ к приватным статическим членам). Однако вы все еще можете использовать функции в стиле C, например, для библиотечных функций.

В Java каждый метод связан с классом, поэтому есть статические методы, но нет функций в стиле C.

1
ответ дан 7 December 2019 в 07:41
поделиться

Попросту говоря, функция аналогична статическому методу Java, однако функция не требует наличия класса, что превращает ее, как говорит Ури, в фрагмент кода верхнего уровня. Один Одним из преимуществ этого является то, что для этого не требуется вызова экземпляра объекта.

0
ответ дан 7 December 2019 в 07:41
поделиться

Это строго словарная разница. Некоторые считают метод операцией, принадлежащей объекту или классу, а функцию - операцией, которая не принадлежит. Другие, например представители C ++, называют их обеими функциями, но обращаются к свободным функциям или функциям, не являющимся членами , когда функция не принадлежит классу или объекту. Я лично использую их как взаимозаменяемые.

В общем, на жаргоне C ++, когда вы хотите сослаться на определенные виды функций (не-члены, члены, не возвращающие значения, ...), вы добавляете прилагательное к функции существительного: функция друга, функция функция void, функция-член и т. д.

2
ответ дан 7 December 2019 в 07:41
поделиться

Является ли функция чем-то вроде статического метода?

Типа. Но я бы скорее сказал, что статический метод подобен функции, которая была порабощена и привязана к объекту . Для развития этой точки зрения см. Казнь в Царстве существительных .

0
ответ дан 7 December 2019 в 07:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: