析构函数和this指针
析构函数:和构造函数作用正好相反,析构函数本质上还是一个函数,构造函数是创建对象的同时系统自动调用构造函数、
而析构函数则是在对象生命周期结束的时候,系统自动调用析构函数,总的来说,构造函数是对象刚创建时就要完成的功能,
想让这个对象刚出生时就完成什么事情,那就用构造函数,而对象生命周期结束之后,有什么心愿未了,用析构函数,但是
要注意的是,析构函数是死了才完成心愿,而不是为了完成心愿而死
什么是析构函数:
1、特殊的成员函数
2、对象声明周期结束时系统自动调用
析构函数的定义:
语法要求:
1、函数名:~类名
2、没有返回值类型和返回值,形参列表永远是空的(这也是为什么不能进行重载的原因)
3、不允许重载
代码格式:
~函数名(形参表)
{
}
***注意析构函数和构造函数在代码格式上只差了个~和形参列表永远为空
构造函数代码格式
函数名(类名)(形参列表)
{
}
析构函数代码格式
~函数名(类名)(形参列表)//不过形参列表永远为空
{
}
析构函数的调用时机:
1、析构函数可以主动通过对象调用(必须是公有属性)
2、在对象生命周期结束时,系统会主动调用析构函数
析构函数的特点:
1、析构函数做的事是对对象做一些清理工作
主动调用析构函数,并不会释放对象。因为是结束生命周期之后才会完成心愿,而不是完成心愿之后结束生命
******一个类只有一个析构函数。因为类定义出来了,因为类的名字就是析构函数的函数名,而析构函数的形参列表又永远为空
this指针:
1、什么是this指针:this指针是系统能够自动生成且隐藏的,看不到定义,但是可以使用
2、this指针并不是对象本身的一部分,它的作用域在类的内部。就比如类是皇帝,对象是大臣,this是专门属于皇帝的
而且在计算类的内存大小的时候是不算this指针的大小的。
3、当类的普通函数在访问类的普通成员的时候,this指针总是指向调用者对象,谁去调用的,就指向谁的,也可以理解为this指针保存着类的整个地址
比如一个成员函数showdate()
这就是一个普通函数,在访问类的成员时:
void classname::showdate()
{
num;//但实际上是this->num;
}
使用this指针:
1、必须在类中使用,在类外是使用不了的
2、this->成员名 或者(*this).成员名;
注意事项:
1、一般情况下,可以省略this指针
2、在类中函数的形参和类中成员同名时,不能省略
比如:
void classname::fun(int val)
{
this->val = val;//不能省略this,因为编译器会分不清,哪个val是类中成员,哪个val是形参,就分不清谁赋值给谁了
}
#游戏开发#
而析构函数则是在对象生命周期结束的时候,系统自动调用析构函数,总的来说,构造函数是对象刚创建时就要完成的功能,
想让这个对象刚出生时就完成什么事情,那就用构造函数,而对象生命周期结束之后,有什么心愿未了,用析构函数,但是
要注意的是,析构函数是死了才完成心愿,而不是为了完成心愿而死
什么是析构函数:
1、特殊的成员函数
2、对象声明周期结束时系统自动调用
析构函数的定义:
语法要求:
1、函数名:~类名
2、没有返回值类型和返回值,形参列表永远是空的(这也是为什么不能进行重载的原因)
3、不允许重载
代码格式:
~函数名(形参表)
{
}
***注意析构函数和构造函数在代码格式上只差了个~和形参列表永远为空
构造函数代码格式
函数名(类名)(形参列表)
{
}
析构函数代码格式
~函数名(类名)(形参列表)//不过形参列表永远为空
{
}
析构函数的调用时机:
1、析构函数可以主动通过对象调用(必须是公有属性)
2、在对象生命周期结束时,系统会主动调用析构函数
析构函数的特点:
1、析构函数做的事是对对象做一些清理工作
主动调用析构函数,并不会释放对象。因为是结束生命周期之后才会完成心愿,而不是完成心愿之后结束生命
******一个类只有一个析构函数。因为类定义出来了,因为类的名字就是析构函数的函数名,而析构函数的形参列表又永远为空
this指针:
1、什么是this指针:this指针是系统能够自动生成且隐藏的,看不到定义,但是可以使用
2、this指针并不是对象本身的一部分,它的作用域在类的内部。就比如类是皇帝,对象是大臣,this是专门属于皇帝的
而且在计算类的内存大小的时候是不算this指针的大小的。
3、当类的普通函数在访问类的普通成员的时候,this指针总是指向调用者对象,谁去调用的,就指向谁的,也可以理解为this指针保存着类的整个地址
比如一个成员函数showdate()
这就是一个普通函数,在访问类的成员时:
void classname::showdate()
{
num;//但实际上是this->num;
}
使用this指针:
1、必须在类中使用,在类外是使用不了的
2、this->成员名 或者(*this).成员名;
注意事项:
1、一般情况下,可以省略this指针
2、在类中函数的形参和类中成员同名时,不能省略
比如:
void classname::fun(int val)
{
this->val = val;//不能省略this,因为编译器会分不清,哪个val是类中成员,哪个val是形参,就分不清谁赋值给谁了
}
#游戏开发#