如何修改用织梦做的网站的模板,价格对比网站开发,asp网站后台无法显示该页面,分类信息的网站如何推广【c————————构造函数和析构函数】 欢迎阅读新一期的c模块————构造函数和析构函数 ✒️个人主页#xff1a;-Joker- #x1f3f7;️专栏#xff1a;C #x1f4dc;代码仓库#xff1a;c_code #x1f339;#x1f339;欢迎大佬们的阅读和三连关注#xff0c…【c————————构造函数和析构函数】 欢迎阅读新一期的c模块————构造函数和析构函数 ✒️个人主页-Joker- ️专栏C 代码仓库c_code 欢迎大佬们的阅读和三连关注顺着评论回访 文章目录 【c————————构造函数和析构函数】构造函数构造函数的特性1.默认构造函数2.含参的构造函数3.构造函数的重载4.在一个类里面有且只能存在一个构造函数 析构函数2.和构造函数一样一个类里面也只能有一个析构函数并且析构函数并不能进行重载。3.默认析构函数4.析构函数的使用场所 构造函数和析构函数的调用顺序总结 构造函数
在之前C语言的学习中中我们通常会使用一个函数Init来对对象进行初始化而在C中为我们提供了一个新的函数来进行初始化————构造函数 构造函数 是一种特殊的方法。主要用来在创建对象时初始化对象 即为对象成员变量赋初始值总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。 构造函数的特性
1.默认构造函数
在C中我们将不给出实参的构造函数统称为默认构造函数 在C中我们可以这样来使用默认构造函数 例如
class Date
{
private:int _year;int _month;int _day;
public:Date(){_year 2023;_month 12;_day 31;}void Display();
};
在上面的代码中Date()就是对我们的默认构造函数它的作用是初始化我们的_year等对象。 另外在当我们忘记写显示构造函数的时候编译器会自动默认给我们写上一个无参的构造函数默认构造函数但是编译器给我们的是一个不含任何语句的默认构造函数所以如果我们需要在默认构造函数内进行赋值就必须手动写默认构造函数。另外如果我们写了显示构造函数的话编译器就不会帮我们自动添加默认构造函数了 2.含参的构造函数
和函数一样构造函数也分为了含参和不含参。 例如
Date(int year,int month,int day)
{_year year;_month month;_day day;
}这个Date就是一个含参的构造函数但是需要注意在默认构造函数中我们可以不添加参数但是当我们一旦添加了含参的构造函数以后我们就需要在定义对象的时候添加参数。这里同样可以通过缺省参数的方式来自己添加需要传的参数可以部分缺省也可以全缺省。 Date(int year2023,int month1,int day1)
{_year year;_month month;_day day;
}3.构造函数的重载
构造函数同样也支持函数重载函数名需要保持一致但是参数类型和顺序必须不一致。
Date(int year2023,int month1,int day1)
{_year year;_month month;_day day;
}Date(long long year2023,int month12,long long day31
{_yearyear;_monthmonth;_dayday;
}4.在一个类里面有且只能存在一个构造函数 析构函数 析构函数的作用和构造函数相反当对象结束其生命周期如对象所在的函数已调用完毕时系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作例如在建立对象时用new开辟了一片内存空间delete会自动调用析构函数后释放内存。 我们在定义析构函数的时候要在函数名前面加上‘~”并且和构造函数相同析构函数也没有参数、返回值和类型。
class stack
{
private:int top;int* a;int capacity;
public:stack(int n);void pushstack(int *p,int x);~stack();~stack()就是一个析构函数。
2.和构造函数一样一个类里面也只能有一个析构函数并且析构函数并不能进行重载。
3.默认析构函数 在我们写类和对象时如果没有添加析构函数编译器就会默认给我们添加一个析构函数-默认析构函数但是他和默认构造函数不同默认构造可以进行操作而默认析构函数什么也不会做。 4.析构函数的使用场所
当我们需要对空间资源进行开辟的时候我们需要写一个析构函数来对我们所开辟的空间进行资源释放。另外如果我们不需要申请资源我们也可以选择不写析构函数但是如果有申请就必须写上不然会造成资源的浪费或泄露。
构造函数和析构函数的调用顺序 构造函数和析构函数的调用顺序为
先构造的后析构后构造的先析构 例如下面的程序 class DateTime
{
public:DateTime(){cout DateTime() endl;}~DateTime(){cout ~DateTime() endl;_hours 0;_minutes 0;_seconds 0;}
private:int _hours;int _minutes;int _seconds;
};class Date
{
private:int _year 2023;int _month 12;int _day 31;// 自定义类型DateTime dt;
};
int main()
{Date d1;Date d2;return 0;
} 总结 一般来说如果在全局范围定义对象那么它的构造函数在本文件模块中的所有函数执行之前调用如果一个程序包含多个文件那么它的构造函数的调用顺序是不确定的当main函数结束或者调用exit结束程序时调用析构函数 如果定义局部对象那么定义时自动调用构造函数。函数调用结束时自动调用析构函数 以上就是关于构造函数和析构函数的内容今年的最后一片博客了各位佬们麻烦支持一波顺着评论回访