首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数重载与方法重载的区别

函数重载与方法重载的区别
EN

Stack Overflow用户
提问于 2012-03-10 18:25:04
回答 3查看 10.6K关注 0票数 3

嗨,我想了解在c++中函数重载和方法重载之间的区别。在谷歌搜索之后我发现了这个。不确定这是否正确。如果错误,请帮助纠正。

方法重载和函数重载是相关的概念。术语方法重载被定义为一种特性,它存在于各种编程语言中,如C++和Java。它允许创建同名的各种函数。然而,所有这些函数在输入类型和输出类型上都不尽相同。

另一方面,函数重载一词在面向对象编程中被使用.它被定义为使用不同的数字和/或参数类型来区分两个或多个具有相同名称的函数的技术。

来源:http://www.blurtit.com/q662319.html

EN

回答 3

Stack Overflow用户

发布于 2012-03-10 18:29:50

在C++ 方法中,通常用于引用类或结构的成员函数,

函数是一个独立的非成员函数。

标准如何声明函数和方法?

根据C++标准,函数声明在:8.3.5函数dcl.fct中定义

在声明T D中,D具有以下形式

D1 (参数-声明-子句)cv-限定符-seqopt异常-指定

声明contained declarator-idT D1类型是“派生-声明-类型-列表”,D中的声明符-id类型是“(parameter-declaration-clause) cv-qualifier-seqopt返回T的派生-声明器-类型列表函数”;此表单的类型是函数type86)。

请注意,标准在#4中进一步说明:

cv-qualifier-seq

A 只能是非静态成员函数的函数类型的一部分

总之,只有方法(成员函数)可以是constvolatile

函数的重载准则&方法重载:

因此,重载函数和重载方法(成员函数)有不同的标准。

函数重载是可能的当且仅当:

arguments.

  • Different序列的
  • 不同的参数

方法(成员函数)重载是可能的当且仅当:

不同数量的arguments.

  • Different序列或

  • 不同的参数或

  • 不同的参数

请注意,返回类型不是重载的标准。因为C++允许实现忽略函数/方法的返回值。

代码示例:

函数重载:

代码语言:javascript
复制
void doSomething(int i);
void doSomething(std::string,int x);

方法重载:

代码语言:javascript
复制
class Myclass
{
     public:
           void doSomething(int i);
           void doSomething(std::string,int x);
           void doSomething(int i) const;
           void doSomething(int i) volatile;
};

上面是一个示例,说明如何将doSomething()重载为一个独立的站立函数和一个方法/成员函数。

票数 4
EN

Stack Overflow用户

发布于 2012-03-10 18:30:00

他们是一回事。

然而,有些人更喜欢调用作为class一部分的方法函数,以及函数,即空闲函数。

代码语言:javascript
复制
//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);
};

方法/函数通过修改签名而保留其名称来重载。签字内容包括:

  • name
  • parameter types
  • cv-qualifiers

因此,要过载,只需更改参数或cv-限定符。也就是说,如果方法是类的一部分,也可以像这样重载如下:

代码语言:javascript
复制
class A
{
   void foo(int x);
   void foo(int x) const;
   void foo(int x, int y);
};

在对不可变对象进行操作时,将调用原型foo(int x) const

票数 2
EN

Stack Overflow用户

发布于 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一起使用的详细信息,并相应地更改输出。

有很多函数重载的例子,这个例子简单地说明了不同的参数如何影响使用的函数的逻辑和输出。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9649005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档