В C ++ Метод обычно используется для ссылки на функцию-член для класса или структуры, в то время как
Функция является автономной функцией, не являющейся членом.
Как стандарт объявляет функцию и метод?
Согласно стандарту C ++, объявление функции определяется в: 8.3.5Функции [dcl.fct]
В объявлении T D
, где D
имеет форму
D1 ( parameter-declaration-clause ) cv-qualifier-seqopt exception-specificationopt
и тип contained declarator-id
вобъявление T D1
равно «производный-декларатор-тип-список-T», тип идентификатора объявления в D
равно «производная-декларатор-тип-список-функция из (parameter-declaration-clause
) cv-qualifier-seqopt
возврат T
”;тип этой формы - функция типа 86).
Обратите внимание, что в стандарте далее указывается в # 4:
A cv-qualifier-seq
должно быть только частьютипа функции для нестатической функции-члена
Для суммирования только методы (функции-члены) могут быть const
или volatile
.
Критерии перегрузки для функции и перегрузки метода:
Таким образом, перегрузка функции и перегрузка метода (функции-члена) имеют разные критерии
Перегрузка функции возможна тогда и только тогда, когда:
- Разное количество аргументов.
- Другая последовательность аргументов или
- Различные аргументы
Метод while (функция-член) Перегрузка возможна тогда и только тогда, когда:
- Разное количество аргументов.
- Другая последовательность аргументов или
- Различные аргументы или
- Разное
cv-qualifer-seq
Обратите внимание, что тип возвращаемого значения не является критерием перегрузки.Поскольку C ++ позволяет реализациям игнорировать возвращаемое значение из функций / методов.
Примеры кода:
Перегрузка функции:
void doSomething(int i);
void doSomething(std::string,int x);
Перегрузка метода:
class Myclass
{
public:
void doSomething(int i);
void doSomething(std::string,int x);
void doSomething(int i) const;
void doSomething(int i) volatile;
};
Выше приведен пример того, как doSomething()
может быть перегружен как автономная функция и как метод / функция-член.