在函数重载中,函数调用的顺序在函数声明中在主函数的外部和内部不同

时间:2015-07-07 06:23:35

标签: c++

如果我们在main之外提到函数声明(如下面的代码中所述),它就可以了。但是如果我在main中提到函数声明,如下面的代码所示,那么在运行时,无论提供什么值(整数或浮点类型),只调用int作为参数类型的区域,即。无论提供的数据类型如何,只重复调用一种类型的函数(此处为area(int))。为什么会发生这种情况,函数声明有什么问题,我希望它能够被提升。谢谢。事先谢谢。

#include<iostream.h>
#include<conio.h>
  //void area(int);
  //void area(float);
void main()
{
  int a;
  float b;
  void area(int);
  void area(float);
  clrscr();
  cout<<"enter the length or breadth of square";
  cin>>a;
  area(a);
  cout<<"enter the radius of the circle";
  cin>>b;
  area(b);
  getch();
}
void area(int x)
{
  cout<<"area of square "<<x*x;
}
void area(float x)
{
  cout<<"\narea of circle "<<3.14*x*x;
}

1 个答案:

答案 0 :(得分:0)

如果在main中您只声明了一个类型为int的参数的函数,则会出现您所描述的内容。例如

#include<iostream.h>
#include<conio.h>

void area(int);
void area(float);

int main()
{
  int a;
  float b;

  void area(int);

  clrscr();

  cout<<"enter the length or breadth of square";
  cin>>a;
  area(a);
  cout<<"enter the radius of the circle";
  cin>>b;
  area(b);
  getch();
}

void area(int x)
{
  cout<<"area of square "<<x*x;
}
void area(float x)
{
  cout<<"\narea of circle "<<3.14*x*x;
}

在这种情况下,只会调用类型为int的参数的函数,因为本地函数声明会隐藏全局命名空间中的函数声明。

否则,如果两个函数都在main中声明,并且只调用类型为int的参数的函数,则编译器会有错误。

考虑到函数main应具有返回类型int,尽管某些编译器允许使用类型void。但是main的这种声明不符合C ++。