读书人

新手学习C++关于构造函数一题,该怎么处

发布时间: 2012-05-06 16:15:43 作者: rapoo

新手学习C++关于构造函数一题
#include <iostream>
using namespace std;
//封装,继承,多态
class Emp{
private:
string name;
int age;
bool gender;
double salary;
public:
Emp(){
cout << "Emp()" << endl;
}
//构造函数
Emp(string n,int a,bool g,double s){
cout<<"Emp(string,int,bool,double)"<<endl;
name = n;
age = a;
gender = g;
salary = s;
}
void show(){
cout<<name<<':'<<age<<':'<<gender<<endl;
}
};

int main()
{
Emp e("Daniel", 30, true, 100000);
e.show();
//e.Emp();//构造函数只能自动调用
Emp e2;

}

请问:1.以上两个构造函数哪个是默认构造函数?
2.如果没有第一个无参构造,那么构造e2时会调用哪个构造呢?
请高手们指教。谢谢!!!

[解决办法]
1 默认构造函数是无参数的

2 无法调用
[解决办法]
1. 没有参数的那个构造函数是默认的构造函数。
2. 在你给出的代码中,如果没有第一个无参构造函数,而第二个有参构造函数存在的话,那么Emp e2;这句话会报错。
[解决办法]
1.无参
2.报错,要么你手动写一个无参的
[解决办法]
补充一下,一个类如果你没有给它定义构造函数,那么编译器会缺省地为你生成一个构造函数,即一个无参的构造函数。如果你给这个类定义了一个构造函数,那么编译器就不会再为你生成一个构造函数了。
[解决办法]
1.Emp()是默认构造函数;因为他不需要参数;
2.如果没有默认构造函数Emp(),则定义e2时编译器会报错,因为没有合适的构造函数,(当你显式定义了构造函数之后,你定义类时要确保参数跟你的构造函数一致,因为系统不再提供默认构造函数)
[解决办法]
书上说,如果你没有显示的给类定义构造函数则编译器会生成默认构造函数。如果你显示的定义了构造函数(并非默认),则必须再显示的定义默认构造函数。但是我在vs2005上发现,第二条就算不显示定义默认构造函数也不会报错。只是你在构造对象的时候不能不带参数(也就是说,必须调用某一个构造函数),如果你不带参数,又没有默认构造函数,编译器就会报错。 而且,默认构造函数不一定要是不带参数的构造函数,也可以是所有参数都设有默认值的构造函数。
[解决办法]

探讨

书上说,如果你没有显示的给类定义构造函数则编译器会生成默认构造函数。如果你显示的定义了构造函数(并非默认),则必须再显示的定义默认构造函数。但是我在vs2005上发现,第二条就算不显示定义默认构造函数也不会报错。只是你在构造对象的时候不能不带参数(也就是说,必须调用某一个构造函数),如果你不带参数,又没有默认构造函数,编译器就会报错。 而且,默认构造函数不一定要是不带参数的构造函数,也可以……

[解决办法]
1.默认是指你一个构造都没写,编译器会帮你加一个无参的构造。你自己是无法写出默认构造的
2.如果没有第一个无参构造,那么构造e2时会编译通不过
[解决办法]
默认的构造函数为无参的。
但是当用户自定义无参构造函数时,系统将不再调用默认的构造函数。
当用户定义了带参构造函数时,必须手动定义无参的构造函数。

读书人网 >C++

热点推荐