【问题标题】:learning about function prototypes and function overloading学习函数原型和函数重载
【发布时间】:2010-10-19 19:02:38
【问题描述】:

谁能给我一个在 c++ 中使用 4 个函数原型的函数重载示例?我仍然没有得到它们很好..

抱歉新手问题,感谢您的关注。

亚当斋月

【问题讨论】:

  • 好像是家庭作业。
  • 不,如果可以的话,3个或更多。 :D 顺便说一句,是的,我已经用谷歌搜索过了,但我相信 stackoverflow 会让我更快地理解这一点:D。
  • 其实“函数原型”更像是一个C术语。在 C++ 中,我们只说“函数声明”。 C++ 内部标准明确区分了声明和定义。

标签: c++ overloading function-prototypes


【解决方案1】:

以下是 C++ 函数声明,通常位于头文件(.h 或 .hpp)中。这些特定的声明没有代码。代码在下面进一步显示的定义中。

int sum(int a, int b);
int sum(int a, int b, int c);
int sum(int a, int b, int c, int d);
int sum(int a, int b, int c, int d, int e);

以上四个函数名称相同,但C++编译器会调用参数签名与调用代码中的那个匹配的那个。声明的目的是告诉编译器函数的返回类型和参数签名是什么。如果多个函数具有相同的名称但参数签名不同,则称为重载。这是 C++ 中不存在的 C++ 特性。请注意,返回类型不能用于区分重载函数。

以下是重载函数的定义(实现),通常位于模块(.cpp 或 .cc 或 .cxx)文件中。这是可执行代码位于功能块周围的大括号 { } 之间的位置:

int sum(int a, int b)
{
    return (a + b);
}

int sum(int a, int b, int c)
{
    return (a + b + c);
}

int sum(int a, int b, int c, int d)
{
    return (a + b + c + d);
}

int sum(int a, int b, int c, int d, int e)
{
    return (a + b + c + d + e);
}

使用示例:

std::cout << sum(3, 4, 5) << std::endl;

将为上面列出的第二个重载函数调用代码,该函数采用三个int 参数。

【讨论】:

  • 所以 C++ 中没有原型?奥尔尼在 c 吗?我们如何在 C 中做第二个?我们把它们放两个吗?
  • 啊,我了解溢出的概念。现在关于原型,我还是有点困惑,所以原型=声明?像函数 x(arg1, arg2) 吗?这是原型吗? c中的正常函数有什么区别?在 c++ 中?我还是不明白。
  • @Adam 在 C++ 中没有定义什么是“原型”。但是,从学术上讲,函数原型是一个函数声明。它仅在 C 中定义,其中包含有关函数参数计数和类型的信息。 void f() { } 不是声明是不正确的:它既是声明又是定义。将此概念与“签名”区分开来很重要。函数的签名可以看作是它的标识:大致是它的作用域(它所属的类或命名空间)、名称和类型。对于模板函数,签名包含更多内容。
  • @Amardeep 您的最后 3 个函数定义中有额外的 ;
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2018-12-27
  • 1970-01-01
相关资源
最近更新 更多