2013-06-01 65 views
-3

让说我有三个.cpp文件和2个文件。C++。我们可以有相同的命名功能,但在不同的文件?

1号文件:

它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更新” 但在一个有1个参数和其他它有两个。

请问我能打电话给一个我想要的吗?我会得到编译错误吗? 我现在无法测试它,因为我正在使用库计算机。

+3

那么为什么不等到你回家,而不是发布一个问题? –

+1

搜索[internal linkage and external linkage](http://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c) – dyp

+3

有一堆在线编译器,例如http://gcc.godbolt.org/或http://coliru.stacked-crooked.com/ – dyp

回答

5

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

OTOH在全局命名空间中放置这样的名字是一种可怕的做法。这只是意外等待发生 - 有人会通过打字错误打电话给意想不到的功能。

真正的重载集不是随机形成的,而是通过设计:这是一个具有相同语义的函数,只是使用不同类型的弹药。他们是意味着联合工作,而回答“哪一个被称为”是“我不在乎”时最好的工作。无论编译器选择哪个都会做适当的工作。

0

名称港岛线在C++进行错位,并因此可以具有不同参数的那些功能。 TGhe编译器为它们创建一个名称,它基于参数。

这就是为什么你可以在同一类的东西,如:

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

,这也适用于正常功能。

+2

国际海事组织这与名称变形无关,而是与联动(和/或超载)无关。 – dyp

0

这是在C++允许并且被称为函数重载。从所述的C++语言标准

C13 P1当在相同范围单个名称指定了两个或更多个不同的声明重载

,该名称被说成是重载。通过扩展,声明相同名称但具有不同类型的同一范围内的两个声明称为重载声明。只有函数函数模板声明可以被重载;变量和类型声明不能被重载。

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

0

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

相关问题