C++的构造函数
C++的构造函数可以分为 构造函数、析构函数、拷贝构造函数。
构造函数
- 无参构造函数,写了的话会覆盖系统默认的无参构造函数
- 有参构造函数会覆盖默认的构造函数。
class Teacher{
private:
char *name;
int age;
public:
//无参构造函数(写了,就会覆盖默认的无参构造函数)
Teacher(){
cout << "无参构造函数" << endl;
}
//有参构造函数会覆盖默认的构造函数
Teacher(char *name, int age){
this->name = name;
this->age = age;
cout << "有参构造函数" << endl;
}
};
析构函数
当对象要被系统释放的时候析构函数才会被调用。那析构函数有什么作用呢?简单来说就是善后的作用,你们先走 我掩护 biu~ a
~Teacher(){
cout << "析构" << endl;
//释放内存
free(this->name);
}
拷贝构造函数
Teacher(const Teacher &obj){
this->name = obj.name;
this->age = obj.age;
cout << "拷贝构造函数" << endl;
}
拷贝构造函数又分为 深拷贝和浅拷贝
- 浅拷贝:拷贝的是指针的地址。
- 深拷贝:拷贝的是指针指向的数据内容。
//深拷贝
Teacher(const Teacher &obj){
//复制name属性
int len = strlen(obj.name);
this->name = (char*)malloc(len+1);
strcpy(this->name,obj.name);
this->age = obj.age;
}
什么情况下会使用拷贝构造函数?
- 声明赋值时。
- 作为参数传入,实参给形参赋值。
- 作为函数返回值返回,给变量初始化赋值时。