C++学习--构造函数和析构函数

构造函数是对对象进行初始化的成员函数,构造函数的名字和类的名字是一样的,构造函数不用特定的调用,是在类实例化中,自动调用。构造函数可以有多个,也就是可以进行构造函数重载,实例化过程中会根据构造函数的参数类型、个数进行调用。析构函数和构造函数相反,是完成一些清理工作,比如释放内存或者其他的工作。析构函数不能重载,一个类只能有一个析构函数。

1.没有参数的构造函数

C++的类成员属性默认是私有的,如果想声明公有属性,要加上public:

#include<iostream>
using namespace std;
class Person//定义一个Person类
{
public:
	Person();//构造函数放在公有属性中,不然不能实例化
	~Person();
};
Person::Person()//构造函数
{
	cout << "from Person" << endl;
}
Person::~Person()//析构函数
{
	cout << "from ~Person" << endl;
}
int main()
{
	Person p1;//实例化
	return 0;
}

可见类的构造函数和析构函数是实例化类中进行调用的,没有参数的构造函数是隐式的,就是没有定义,在类的实例化中也会调用。

2.构造函数重载

构造函数支持重载,当类中属性需要初始化时,就可以通过构造函数对这些属性进行初始化,因为类是抽象的,在定义的时候属性不能赋值,只能在实例化中进行初始化。构造函数可以有多个,重载原则和函数重载是一样的。

#include<iostream>
using namespace std;
class Person
{
private://声明一些私有属性
	int age;
	int height;
public:
	Person();
	Person(int, int);//构造函数重载
	void print_info();//声明一个打印类信息的函数
	~Person();
};
Person::Person()
{
	cout << "from Person" << endl;
}
Person::Person(int age,int height)
{
	this->age = age;//this是隐含的指向类自己的指针
	this->height = height;
}
void Person::print_info()
{
	cout << "age=" << age << endl;
	cout << "height=" << height << endl;
}
Person::~Person()
{
	cout << "from ~Person" << endl;
}
int main()
{
	Person p1;//实例化类会根据参数进行调用对应的构造函数
	Person p2(20, 170);
	p2.print_info();//调用公有方法
	return 0;
}

由此可见,在实例化中,和函数的重载是一样的,会根据类的参数进行调用相应的构造函数对类进行实例化。如果调用p1的print_info()方法,你会看到是没有初始化的值,因为p1实例化中并没有传参。

this是指向对象自己的指针,通过this指向属性来区分相同名字的参数。

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/83025215