C++构造函数/析构函数、初始化列表

构造函数

构造函数会在对象创建时候自动调用,与类同名,一般用于完成类的初始化工作,可重载

#include <iostream>
using namespace std;

class Person
{
public:
	Person()
	{
		m_age = 5;
		cout << "构造函数 go" << endl
			<<"age = "<<m_age<<endl;		
	}
	Person(int a)
	{
		m_age = a;
		cout << "构造函数 go" << endl
			<<"age = "<<m_age<<endl;		
	}
private:
	int m_age;
};

int main()
{	
	Person person;//自动调用构造函数
	Person person1(1);//重载
	getchar();
	return 0;
}

输出结果:
在这里插入图片描述
创建对象的方式可以是Person person,可以new,也可以malloc,前两个会调用构造函数,但malloc不会调用构造函数

析构函数

析构函数在程序结束时自动调用,不可重载,一般用于delete一些new出来的对象。
delete会调用析构函数,free不会调用析构函数

class Person
{
public:
	Person()
	{
		m_age = 5;
		cout << "构造函数 go" << endl
			<<"age = "<<m_age<<endl;		
	}
	~Person()
	{
		
	}
private:
	int m_age;
};

初始化列表

  1. 假如我们这样定义类Person
class Person
{
public:
	Person(int a,int b)
	{
		m_age = a;
		m_height = b;		
	}
private:
	int m_age;
};
  1. 我们可以在函数调用时,给构造函数传参来初始化属性
Person person(5);
  1. 也可以这样
class Person
{
public:
	Person(int a,int b):m_age(a),m_height(b)
	{
		/*
		m_age = a;
		m_height = b;		
		*/
	}
private:
	int m_age;
};

tips: 为了方便,在定义构造函数时,可以配合默认参数,在调用时既可以传参,又可以不传

构造函数调用构造函数

假如说,在写代码时重载了构造函数,还想实现相互调用,则必须在初始化列表中调用,不能在构造函数实现里面调用。

class Person{
public:
	int m_agr;
	void Person():Person(5){
		/*不能在这里写
		Person(5);
		*/
	}
	void Person(int a){
		m_arg = a;
	}
};

int main(){
	Person person;
	return 0;
}

父类构造函数的调用

子类在继承父类后,创建子类对象时会先调用父类的无参构造函数,然后才会调用自己的构造函数。如果父类未定义无参构造函数,则子类需要指定调用父类有参构造函数(初始化列表处调用)

程序结束时,会先析构掉子类,然后是父类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值