#include<iostream>
using namespace std;
int n = 0;
class Student{
private:
int num;
public:
//默认构造函数
Student(){
cout<<"调用默认构造函数"<<endl;
};
//有参构造函数
Student(int num){
this->num = num;
cout<<"调用有参构造函数"<<endl;
};
//拷贝构造函数
Student(const Student &s){
num = s.num;
cout<<"调用拷贝构造函数"<<++n<<"次"<<endl;
};
~Student(){};
};
void fun1(Student s){
//由于函数的参数是类,所以会调用拷贝构造函数
}
Student fun2(){
Student s1;
return s1;
}
int main(){
Student s1;
Student s2(10);
Student s3(s2);
fun1(s3);
Student s4 = fun2();
return 0;
}
注意事项:
1)如果写类时,什么构造函数都没写,那么系统将提供默认构造函数、拷贝构造函数
2)如果自己写了有参构造函数,那么系统不会提供默认构造函数,但还会提供拷贝构造函数
3)如果自己写了拷贝构造函数,那么系统将不会提供默认构造函数和有参构造函数
4)无参构造函数一定是默认构造函数, 而默认构造函数可能是无参构造函数,也可能是所有参数都有默认值的构造函数。