今天在校内看到C++主页发现了一个关于构造函数的程序,小弟我没搞明白,特来
今天在校内看到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?
根据函数重载:无参调用也可以调用默认参数函数,那又为什么没有调用默认参数函数?
------解决方案--------------------
构造函数调用其中一个最合适的一个,并不是每个都要调用
------解决方案--------------------
里面的
#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; }