构造函数: 在对象实例化的时候被自动调用。
构造函数与类同名
构造函数没有返回值。
构造函数可以进行重载。
实例化对象时仅用到一个构造函数。
用户没有定义构造函数时候,系统会创建一个默认的。
定义构造函数:
class Student {
public:
// 无参数
Student(){
m_strName = "xiaosan";
}
// 有参数
Student(string name){
m_strName = name;
}
private:
string m_strName;
}
对象初始化
Student t1;
Student t2("shabi");
注意点:
Student(){
m_strName = "xiaosan";
}
Student(string name = "sss"){
m_strName = name;
}
当要调用的时候,如果需要使用默认值。
Student t1();
Student t2();
这样调用时有冲突的。
构造函数初始化列表
默认构造函数:在创建对象不需要传参数的构造函数。
class Student {
public:
Student(){}
Student(string name = "jim")
// 上面两个是一样的
}
class Student {
public:
// 这里使用的是函数的初始化列表
/*
使用初始化列表先于构造函数执行。
使用初始化列表可以给 常量赋值。
初始化列表只能用于构造函数。可以同时初始化多个值。
*/
Student(): m_strMame("jim"), m_iAge(10){}
Student(string name = "jim")
// 上面两个是一样的
private:
string m_strName;
int m_iAge;
}
拷贝构造函数
class Student {
public:
Student(){
m_strName = "ssss"
}
// 拷贝构造函数
// 格式: 类名(const 类名 & 变量名)
Student( const Student& stu){
}
private:
string m_strName;
// 上面两个是一样的
}
Student stu1;
Student stu2 = stu1;
Student stu3(stu1);
初始化了三次,但是构造函数就调用了一次。
stu2 和 stu3 的初始化是使用 拷贝构造函数来实现的
注意: 当采用赋值初始化,和使用对象进行初始化的时候使用的是。拷贝构造函数。
析构函数
归还使用的系统资源
// 这就是一个析构函数
// 没有参数,也没有重载的概念
~类名(){
}
网友评论