今天在校内看到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?
根据函数重载:无参调用也可以调用默认参数函数,那又为什么没有调用默认参数函数?
[解决办法]
构造函数调用其中一个最合适的一个,并不是每个都要调用
[解决办法]
里面的
Foo b();
[解决办法]
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(); 这是个函数声明。。。
int main(){ Foo a( 3 ); Foo b(); cout<<typeid( b ).name() <<endl; return 0;}
[解决办法]
好贴 这个问题的确是困扰好多人的问题 这样可以加深理解
[解决办法]
有没有人上机试过代码呢?
[解决办法]
刚刚我也试了下,觉得这个应该与编译器有关系,我在g++上使用这样的代码是编译不过去的
#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;}