Я - программист Java и пытаюсь понять различие между методом (методы Java) и функцией (такой как в C++). Я раньше думал, что они - то же, просто различные соглашения о присвоении имен для различных языков программирования. Но теперь, когда я знаю, что они не, я испытываю затруднения при понимании различия.
Я знаю, что метод касается экземпляра класса и имеет доступ к данным класса (членские переменные), в то время как функция не делает (?). Так функция отчасти как статический метод?
Посмотрите здесь для объяснений, которые я считал, который привел меня думать это.
Функция - это просто общее имя для части кода в программе. Слово «метод» является синонимом функции. То же самое и с «подпрограммами», «процедурами» и т. Д.
Функции 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;
}
Итак, различие между «методом» и «функцией» - это просто соглашение.
В C все "функции" являются "верхним уровнем" в том смысле, что они не были связаны с типом. Если они были в вашей области видимости (например, через include), вы могли ссылаться на них, и они могли быть связаны.
В C++ вы можете создавать классы и помещать в них методы. Методы, помеченные как статические, вызываются через определенный класс, но не связаны с экземпляром класса. В этом смысле они похожи на функции. Однако им предоставляются некоторые привилегии, связанные с классом (например, их можно сделать приватными и получить доступ к приватным статическим членам). Однако вы все еще можете использовать функции в стиле C, например, для библиотечных функций.
В Java каждый метод связан с классом, поэтому есть статические методы, но нет функций в стиле C.
Попросту говоря, функция аналогична статическому методу Java, однако функция не требует наличия класса, что превращает ее, как говорит Ури, в фрагмент кода верхнего уровня. Один Одним из преимуществ этого является то, что для этого не требуется вызова экземпляра объекта.
Это строго словарная разница. Некоторые считают метод операцией, принадлежащей объекту или классу, а функцию - операцией, которая не принадлежит. Другие, например представители C ++, называют их обеими функциями, но обращаются к свободным функциям или функциям, не являющимся членами , когда функция не принадлежит классу или объекту. Я лично использую их как взаимозаменяемые.
В общем, на жаргоне C ++, когда вы хотите сослаться на определенные виды функций (не-члены, члены, не возвращающие значения, ...), вы добавляете прилагательное к функции существительного: функция друга, функция функция void, функция-член и т. д.
Является ли функция чем-то вроде статического метода?
Типа. Но я бы скорее сказал, что статический метод подобен функции, которая была порабощена и привязана к объекту . Для развития этой точки зрения см. Казнь в Царстве существительных .