-3

假设我有三个 .cpp 文件和 2 个头文件。

第一个文件:

它 main.cpp,它调用所有函数和东西。包括2个头文件。


第二个文件:

包含两个功能:

int print(int num2, int num1)

int update(int num1)

第三个文件:

包含三个功能:

int calculate(int num2, int num3, int num4)

int update(int num2, char random)

int divied(int all)

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++

正如你所知道的,第二个和第三个文件有一个相同的命名函数“int update”,但其中一个有 1 个参数,另一个有两个。

我可以打电话给我想要的人吗?我会得到编译错误吗?我现在无法测试它,因为我正在使用图书馆计算机。

4

4 回答 4

5

从技术上讲,是的,你会的。具有不同签名的函数形成一个重载集,在调用时将通过匹配传递的实际参数的数量和类型来选择合适的函数。

OTOH 将这样的名称放在全局命名空间中是一种糟糕的做法。这只是等待发生的意外——有人会通过拼写错误调用意外的函数。

真正的重载集不是随机形成的,而是设计使然:即具有相同语义的函数,只是使用了不同种类的弹药。他们旨在联合工作,并且当回答“谁被称为”是“我不在乎”时效果最好。编译器选择的任何一个都会做正确的工作。

于 2013-06-01T18:16:22.043 回答
0

是的,这就是所谓的函数重载。事实上,它可以在同一个文件中工作。只要确保函数不采用相同的参数,否则编译器将无法区分它们。

于 2013-06-01T18:15:21.590 回答
0

该名称将在 C++ 中被修改,因此您可以使用具有不同参数的这些函数。TGhe 编译器根据参数为它们创建一个名称。

这就是为什么你可以在同一个班级中拥有类似的东西:

foo(int a);
foo(int a, int b);
foo(std:string s),
etc. ...

这也适用于正常功能。

于 2013-06-01T18:11:41.017 回答
0

是的,这在 C++ 中是允许的,称为函数重载。来自 C++ 语言标准的 C13 p1

重载

当在同一范围内为单个名称指定两个或多个不同的声明时,该名称称为重载。通过扩展,在同一范围内声明相同名称但具有不同类型的两个声明称为重载声明。只能重载函数函数模板声明;变量和类型声明不能重载。

只要您使用正确的参数调用函数,编译器就会使用正确的函数。

于 2013-06-01T18:12:55.993 回答