C++ 构造函数和析构函数

构造函数

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。
注意: 在构造函数时,优先级为 全局对象 > 局部变量 ; 静态变量 > 普通变量。

struct  Time
{
public:
	Time()
	{
		 _hour = 0;
		 _minute = 0;
		 _second = 0;
	}
	void print()
	{
		cout << _hour << "-" << _minute << "-" << _second << endl;
	}
private:
	int _hour;
	int _minute;
	int _second;
};
// Time 类是用来辅助演示 系统默认构造函数的
class Date
{
public:
    // 1. 这是系统默认的构造函数,是不可见的,如果你没有自己定义构造函数,那么系统就会自动调用这个函数
     Date(){}  //不可见的,它不会初始化自身类中的成员变量,但是会去初始化自身类中嵌套的其他类的成员变量。
     //2. 这是全缺省构造函数 
	Date(int year = 2020, int month = 4, int day = 12)
	{
		_year = year;
		_month = month;
		_day = day;
	}
    //3. 无参的构造函数
    Date()
    {
       	_year = 2020;
		_month = 4;
		_day = 12;
	}
	void Display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
	Time s;
	//如果这里还有一个其他类 Time s; 那么调用系统默认构造函数则会将 Time 类中的成员变量初始化,而不会初始化自身的成员变量,所以这是 C++ 的一个坑
};
int main()
{
    Date d1;  //构造函数的3中: 1.系统默认构造函数(自己不定义则使用,否则会调自己定义的)
     //2. 全缺省构建函数    3. 无参构造函数
	d1.Display();

	return 0;
}

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。

析构函数

概念

与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。

特性

析构函数是特殊的成员函数。
其特征如下:

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值。
  3. 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

特点

从下往上进行析构,和构造函数顺序刚好相反。

class Stack
{
public:
	void print()
	{
		cout << this << endl;
	}
	~Stack() 
	{
		cout << "~Stack" << "-" << this << endl;
	}

private:
	int* _a;
	int _size;
	int _capacity;
};
int main()
{
	Stack s1;
	s1.print();
	Stack s2;
	s2.print();
}
// 由这个代码就能看出析构函数是从下往上进行清理的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值