注册 登录
编程论坛 C++ Builder

求助:今天在校内看到C++主页君发了一个关于构造函数的程序,我没搞明白,特来求助!

天涯海角sxl 发布于 2012-03-23 19:07, 707 次点击
程序代码:
#include <iostream>
using namespace std;
  class Foo
  {
  public:
      Foo()   
      {   
           cout <<"1"<< endl;
      }   
      Foo(int a = 4)
      {   
          cout << a << endl;
      }
  };
  int main()
  {
      Foo a(3);   
      Foo b();
      return 0;
  }
结果输出是3

首先,结果输出为什么不是31?
根据函数重载:无参调用也可以调用默认参数函数,那又为什么没有调用默认参数函数?
4 回复
#2
xiaang1232012-04-10 20:37
定义无参类对象的时候不能用 Foo b();
Foo b(); 表示声明一个函数 返回类型为FOO.

#3
xiaang1232012-04-10 20:52
修改之后再出错是因为
Foo(int a = 4)参数全部为实参了,就属于默认构造函数;
因此不能再次声明无参数的默认构造函数Foo();否则会产生二义性的问题.
#4
sunkaidong2012-04-24 16:33
别把自己绕进去,呵呵。
#5
zhao_meng2012-07-19 00:25
1.默认构造函数都没有参数
2.带默认参数也是有参数的,Foo b()生命是错误的
1