嗨,我想了解在c++中函数重载和方法重载之间的区别。在谷歌搜索之后我发现了这个。不确定这是否正确。如果错误,请帮助纠正。
方法重载和函数重载是相关的概念。术语方法重载被定义为一种特性,它存在于各种编程语言中,如C++和Java。它允许创建同名的各种函数。然而,所有这些函数在输入类型和输出类型上都不尽相同。
另一方面,函数重载一词在面向对象编程中被使用.它被定义为使用不同的数字和/或参数类型来区分两个或多个具有相同名称的函数的技术。
来源:http://www.blurtit.com/q662319.html
发布于 2012-03-10 18:29:50
在C++ 方法中,通常用于引用类或结构的成员函数,
函数是一个独立的非成员函数。
标准如何声明函数和方法?
根据C++标准,函数声明在:8.3.5函数dcl.fct中定义
在声明
T D中,D具有以下形式
D1 (参数-声明-子句)cv-限定符-seqopt异常-指定
声明contained declarator-id的T D1类型是“派生-声明-类型-列表”,D中的声明符-id类型是“(parameter-declaration-clause) cv-qualifier-seqopt返回T的派生-声明器-类型列表函数”;此表单的类型是函数type86)。
请注意,标准在#4中进一步说明:
cv-qualifier-seq
A 只能是非静态成员函数的函数类型的一部分
总之,只有方法(成员函数)可以是const或volatile。
函数的重载准则&方法重载:
因此,重载函数和重载方法(成员函数)有不同的标准。
函数重载是可能的当且仅当:
arguments.
方法(成员函数)重载是可能的当且仅当:
不同数量的arguments.
请注意,返回类型不是重载的标准。因为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()重载为一个独立的站立函数和一个方法/成员函数。
发布于 2012-03-10 18:30:00
他们是一回事。
然而,有些人更喜欢调用作为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。
发布于 2012-03-10 18:53:56
在一般意义上,函数返回值。方法只需执行操作。
你会经常看到的教科书例子是door.open()和hood.open() (是的,我们都讨厌糟糕的-> OO类比,但在这个例子中很明显)。这些都是方法。你打开门,就没有副产品了。但是,关键在于必须如何打开门,而不是引擎盖是如何打开的;它们非常相似,可以共享操作,但在具体实现方面却有所不同(这是您理所当然地希望躲过user...doors open out,而兜帽打开up)。
但是,函数用函数返回的值替换对函数的原始调用。如果我的理解是正确的,你可以通过测量一个car.exhaust(30, 0)来显示这一点,它返回碳、氧和其他气体在30秒内排放的重量,以每小时0英里的速度运行。但是,car.exhaust(30, 60)函数将包含未与speed变量0一起使用的详细信息,并相应地更改输出。
有很多函数重载的例子,这个例子简单地说明了不同的参数如何影响使用的函数的逻辑和输出。
https://stackoverflow.com/questions/9649005
复制相似问题