1.构造函数
1) 构造函数的作用
>创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
2) 构造函数的语法
>a.没有返回值也不写 void
>b.函数名称与类名相同
>c.构造函数可以有参数,因此可以发生重载
>d.程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
3)构造函数分类
a.无参构造
b. 有参构造
>c. 拷贝构造
class Student {
public:
Student();// 无参构造
Student(int age); //有参构造函数
Student(Student &stu);// 拷贝构造
~Student();
void show();
private:
int m_age;
};
// 有参构造函数
Student::Student(int age) {
this->m_age = age;
cout << "有参构造" << endl;
}
// 无参构造函数
Student::Student() {
this->m_age = 1000;
cout << "无参构造" << endl;
}
// 有参构造函数
Student::Student(Student &stu) {
this->m_age = stu.m_age;
cout << "拷贝构造函数" << endl;
}
Student::~Student() {
cout << "析构函数" << endl;
}
void Student::show() {
cout <<this->m_age << endl;
}
int main() {
Student stu1;//调用无参构造
Student stu2(15);// 有参构造函数
Student stu3(stu2);// 拷贝构造
return 0;
}
复制代码
3)构造函数调用方法
>a.括号法
>b. 显示法
>c. 隐式转换法
//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
//Student stu0();//调用无参构造错误
Student stu1(100);// 括号法
Student stu2 = Student(200);//显式法
Student stu3 = 100;//隐式转换法等价于:Student stu3 = Studnet(100)
Student stu4 = stu3;//Student stu4 = Student(stu3);
//注意:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明
//Student stu5(stu3);//错误
复制代码
2。析构函数
~类名(){}
>a. 没有返回值也不写 void
>b. 函数名称与类名相同,在名称前加上符号 ~
>c. 析构函数不可以有参数,因此不可以发生重载
>d. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
class Person
{
public:
//构造函数
Person()
{
cout << "Person的构造函数调用" << endl;
}
//析构函数
~Person()
{
cout << "Person的析构函数调用" << endl;
}
};
复制代码
评论