函数重载和方法重载之间的区别
Difference between function overloading and method overloading
嗨,我试图了解 c++ 中的函数重载和方法重载之间的区别。谷歌搜索后,我遇到了这个。不确定这是否正确。如果错误,请帮助更正。
方法重载和函数重载是相关的概念。术语方法重载被定义为在各种编程语言(如C++和Java(中发现的功能。它允许创建具有相同名称的各种函数。但是,所有这些函数在输入类型和函数输出类型方面彼此不同。
另一方面,术语函数重载用于面向对象编程。它被定义为一种技术,其中使用不同数量和/或类型的参数将具有相同名称的两个或多个函数彼此区分。
来源 : http://www.blurtit.com/q662319.html
在C++方法中通常用于引用类或结构的成员函数,
而,函数是一个独立的非成员函数。
标准如何声明函数和方法?
根据C++标准,函数声明的定义如下:8.3.5 函数
在声明
T D
中,D
具有以下形式D1 ( parameter-declaration-clause ) cv-qualifier-seqopt exception-specificationopt
声明
T D1
中的contained declarator-id
类型是"派生声明器类型列表T">,D
中声明符 id 的类型是"(parameter-declaration-clause
(cv-qualifier-seqopt
返回T
的派生声明器类型列表函数";此窗体的类型是函数类型86(。
请注意,该标准在 #4 中进一步声明:
cv-qualifier-seq
只能是非静态成员函数的函数类型的一部分
总结 只能const
或volatile
方法(成员函数(。
函数和方法重载的重载标准:
因此,重载函数和重载方法(成员函数(具有不同的条件
函数重载在以下情况下且仅当
:- 不同数量的参数。
- 不同的参数顺序或
- 不同的论点
而方法(成员函数(重载是可能的,当且仅当:
- 不同数量的参数。
- 不同的参数顺序或
- 不同的参数或
- 不同的
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()
作为独立函数和方法/成员函数重载。
它们是一回事。
但是,有些人更喜欢调用作为class
一部分的函数和函数,自由函数。
//function overloading
void foo(int x);
void foo(int x, int y);
//method overloading
class A
{
void foo(int x);
void foo(int x, int y);
};
方法/函数通过修改签名但保留其名称来重载。签名包括:
- 名字
- 参数类型
- 简历限定符
因此,要重载,您只需更改参数或 cv 限定符。 即,如果该方法是类的一部分,您也可以像这样重载:
class A
{
void foo(int x);
void foo(int x) const;
void foo(int x, int y);
};
原型foo(int x) const
将在对不可变对象进行操作时调用。
在一般意义上,函数返回值。方法只是执行操作。
你会看到很多教科书的例子是door.open()
和hood.open()
(是的,我们都讨厌糟糕的汽车 -> OO 类比,但在这种情况下很明显(。这些是方法。你打开门,没有副产品。但是,它确实归结为必须如何打开门,而不是如何打开引擎盖;它们足够相似,可以共享操作,但在详细实现上有所不同(这是您理所当然地希望对用户隐藏的......门打开,而引擎盖打开(。
但是,函数会将对函数的原始调用替换为函数返回的值。如果我理解正确,您可以通过测量car.exhaust(30, 0)
来证明这一点,它返回 30 秒内排放的碳、氧和其他气体的重量,以 0 英里/小时的速度行驶。但是,car.exhaust(30, 60)
函数将包含未与speed
变量 0 一起使用的详细信息,并将相应地更改输出。
有很多函数重载的例子,这个例子只是演示了不同的参数如何影响所用函数的逻辑和输出。
- 你能帮我了解重载一元运算符和二进制运算符之间的区别吗?
- 函数隐藏和重载之间的区别
- 函数重载和模板函数有什么区别?哪个更合适?
- C++ 中多态性和函数重载之间的区别
- C++:使用结构或枚举重载构造函数之间的区别
- C++中函数的重写和重载之间的区别
- 从新重载调用构造函数和直接调用构造函数有什么区别?
- 这两种类型的运算符重载有什么区别
- 运算符 [] 重载写入/读取之间的区别
- 函数重载和方法重载之间的区别
- 使用向量和指针的双下标重载的区别
- 2 运算符重载有什么区别
- 重载 operator= 时返回引用和值有什么区别?
- <</>>运算符重载和输入/输出函数之间的区别
- c++中这些操作符重载方法的区别
- 重载运算符 new 和运算符 new[] 在 C++ 中有什么区别?
- c++中迭代器的前缀和后缀自增操作符重载实现的区别
- 重载模板函数时显式专用化和常规函数之间的区别
- 专业化和重载有什么区别
- 在类内部或外部重载操作符有什么区别?