首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-10-12 
今天在校内看到C++主页发现了一个关于构造函数的程序,我没搞明白,特来求助#include iostreamusing names

今天在校内看到C++主页发现了一个关于构造函数的程序,我没搞明白,特来求助
#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?
根据函数重载:无参调用也可以调用默认参数函数,那又为什么没有调用默认参数函数?

[解决办法]
构造函数调用其中一个最合适的一个,并不是每个都要调用
[解决办法]
里面的

C/C++ code
Foo b();
[解决办法]
C/C++ code
Foo *b = new Foo();
[解决办法]
1.Foo a(3);
Foo b;

2.Foo a(3);
Foo *b = new Foo();

避免构造函数的二义性。
[解决办法]
Foo b();
....
这个是什么东西? 构造?
如果要写的话 就算不想new一个新的实例也应该写成Foo b;
多打了个括号吧
[解决办法]
把Foo b();改成Foo b;

[解决办法]
把Foo b();改成Foo b;
[解决办法]
这个问题是我们初学者很空绕的问题 学习
[解决办法]
是啊,第二个构造函数给了默认值,所以定义对象的时候要注意。
[解决办法]
Foo b(); 这是个函数声明。。。
C/C++ code
int main(){    Foo a( 3 );    Foo b();    cout<<typeid( b ).name() <<endl;    return 0;}
[解决办法]
好贴 这个问题的确是困扰好多人的问题 这样可以加深理解
[解决办法]
有没有人上机试过代码呢?

[解决办法]
刚刚我也试了下,觉得这个应该与编译器有关系,我在g++上使用这样的代码是编译不过去的
C/C++ code
#include <iostream>using namespace std;  class Foo{  public:      Foo()         {             cout <<"1"<< endl;      }         Foo(int a = 4)      {             cout << a << endl;      }};int main(){    Foo *a=new Foo(3);       Foo *b=new Foo();    system("pause");    return 0;} 

热点排行