四、构造函数
构造函数是一种特殊的方法,用于在创建对象时初始化对象的属性。在封装中,构造函数可以被用来封装对象的属性和方法,并确保对象在被创建时都被正确初始化。通过构造函数,我们可以控制对象的创建过程,隐藏对象的内部细节,以及提供统一的接口来访问对象的属性和方法。这样可以有效地实现封装,提高代码的可维护性和可复用性。
作用:在创建对象的时候初始化对象(给成员变量进行初始化)
构造函数规则:
1、函数名与类名相同,大小写也要一致
2、没有返回值类型,连void都没有
3、没有具体的返回值(不能由return返回结果数据)
4、如果没有写构造函数,系统会提供默认构造函数
代码示例:
#include <iostream>
#include <string>
using namespace std;
class Employee{
private:
string name;
int number;
public:
Employee()//初始化无赋值
{
name = "";
number = 0;
}
// Employee(string name,int number)//可以对成员变量进行初始化赋值
// {
// this->name = name;
// this->number = number;
// }
Employee(string name,int number):name(name),number(number){}//初始化列表
Employee(string name):name(name),number(number){}
string getName()
{
return name;
}
void setName(string name)
{
this->name = name;
}
int getNumber()
{
return number;
}
void setNumber(int number)
{
this->number = number;
}
};
int main()
{
Employee emp1{};//emp1()系统会判断生成emp1()函数,而不是调用类
Employee emp2("gaoyinjie",1);
Employee emp3("list");
cout<<"员工emp1的信息:"<<emp1.getName()<<","<<emp1.getNumber()<<endl;
cout<<"员工emp2的信息:"<<emp2.getName()<<","<<emp2.getNumber()<<endl;
cout<<"员工emp3的信息:"<<emp3.getName()<<","<<emp3.getNumber()<<endl;
}
运行结果:
员工emp1的信息:,0
员工emp2的信息:gaoyinjie,1
员工emp3的信息:list,3
五、析构函数
析构函数是在对象被销毁时自动调用的特殊成员函数,用于清理对象所分配的资源,例如释放动态分配的内存、关闭文件、释放网络连接等。析构函数的名称与类名相同,前面加上波浪号(~),没有参数和返回值。当对象超出作用域、被删除或者程序结束时,析构函数会被自动调用。析构函数的作用是确保对象的资源被正确释放,避免内存泄漏和资源泄漏问题。
代码示例:
#include <iostream>
#include <string>
using namespace std;
class Object{
public:
Object()
{
cout<<"Object::Object()"<<endl;
}
~Object()
{
cout<<"~Object::~Object()"<<endl;
}
};
int main()
{
// Object *pObj = new Object();
// delete pObj;
Object *pObjs = new Object[5];//此时只会调用无参的构造函数
delete []pObjs;
return 0;
}
运行结果:
Object::Object()
Object::Object()
Object::Object()
Object::Object()
Object::Object()
~Object::~Object()
~Object::~Object()
~Object::~Object()
~Object::~Object()
~Object::~Object()