每个对象有初始设置 和 对象销毁前清理数据的 设置 :
类比生活:下载软件的初始化 汉化, 退出网页后的注销账号
构造函数:初始化
构造函数:主要作用再创建对象时为对象成员属性赋值
析构函数:做清理
析构函数:对象销毁前自动调用
这两个函数会被编译器自动调用,
如果我们不提供构造和析构,编译器会自己提供空实现
所以我们得提供构造和析构,编译器自动调用
构造函数的语法:类名( ){ }
1.构造函数,没有返回值,也不写void
2.函数名称与类名称相同
3.构造函数可以有参数,因此可以发生重载
4.程序在创建对象的时候,会自动调用构造,而且指挥调用一次
#include<iostream>
using namespace std;
//1. 构造函数 进行初始化操作
class Person{ //类名
public:
Person(){ //方法名(函数)
cout<<"Person 函数构造的调用"<<endl;
}
};
void test01(){
Person p; //表面上 创建了一个对象p,Person类的
//表面上没有调用Person方法(函数)
}
int main(){
test01();
}
析构函数语法:~类名( ){ }
1.构造函数,没有返回值,也不写void
2.函数名称与类名称相同,在名称前要加上~
3.构造函数不可以有参数
4.程序在销毁对象前,会自动调用,而且指挥调用一次
#include<iostream>
using namespace std;
//2. 析构函数 进行清空操作
class Person{ //类名
public:
Person(){ //方法名(函数) //构造函数
cout<<"Person 构造函数的调用"<<endl;
}
~Person(){//析构函数
cout<<"Person 析构函数的调用"<<endl;
}
};
void test01(){
Person p; //在栈上数据,test01执行完毕后,释放这个对象
//释放前会调用析构函数
int main(){
test01();
}
why:为什么对象定义在main函数中没有析构函数?
因为存在system("pause"); 没等main函数释放,所以还没轮到析构函数
如果在devc++中不写system("pause");析构函数还是会出现的
#include<iostream>
using namespace std;
//2. 析构函数 进行清空操作
class Person{ //类名
public:
Person(){ //方法名(函数) //构造函数
cout<<"Person 构造函数的调用"<<endl;
}
~Person(){//析构函数
cout<<"Person 析构函数的调用"<<endl;
}
};
int main(){
Person p;
system("pause");
}
⭐函数构造的分类以及调用
两种分类方式:
按参数分类:有参构造和无参构造
按类型分类:普通构造和拷贝构造
三种调用方式:
括号法
显示法
隐式转化法