目录
对象的初始化和清理
·生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时也会删除一些自己信息数据保证安全
·C++中的面向对象来源于生活,每个对象也都会有初始化设置以及对象销毁前的的清理数据的设置
1.构造函数与析构函数
对象的初始化和清理也是两个非常重要的安全问题
一个对象或者变量没有初始状态,对其使用后果是未知
同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题
C++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作,对象的初始化和清理工作是编译器强制要求我们要做的事,因此我们如果不提供构造和析构,编译器会提供
编译器提供的构造函数和析构函数是空实现
构造函数:
主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用
语法: 类名(){}
1.构造函数,没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时会自动调用构造,无需手动调用,而且只会调用一次
析构函数:
主要作用在于对象销毁前系统自动的调用,执行一些清理工作
语法:~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在类名前加上“~”符号
3.析构函数不可以有参数,因此不可以发生重载
4.程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次
#include <iostream>
using namespace std;
//对象的初始化和清理
//1、构造函数 进行初始化
class Person
{
public:
//1.1构造函数
//没有返回值 不用写void
//函数名 与类名相同
//构造函数可以有参数,可以发生重载
//创建对象的时候,构造函数会自动调用,而且只调用一次
Person()
{
cout << "Person 函数的调用" << endl;
}
//2.析构函数 进行清理的操作
//没有返回值 不写void
//函数名与类名相同 在名称前加~
//析构函数不可以有参数,不可以发生重载
//对象在销毁前会自动调用析构函数,而且只会调用一次
~Person()
{
cout << "Person 析构函数的调用" << endl;
}
};
//构造和析构都是必须有的实现,如果我们自己不实现,编译器会提供一个空实现的构造和析构
void test01()
{
Person p;//栈上的数据,test01执行完毕后,释放这个对象
}
//析构函数 进行清理的操作
int main()
{
test01();
//Person p;
system("pause");
return 0;
}
2.构造函数的分类及调用
两种分类方式:
按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造
三种调用方式:
括号法
显示法
隐式转换法
#include <iostream>
using namespace std;
//构造函数的分类及调用
//分类
// 按照参数分类 无参构造(默认构造) 和 有参构造
// 按照类型分类 普通构造函数 拷贝构造函数
class Person
{
public:
//构造函数
Person()
{
cout << "Person的无参构造函数调用" << endl;
}
Person(int a)
{
age = a;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造
Person(const Person& p)
{
//将传入的人(p)身上的