一、对象的特征
●构造函数与析构函数
类似于手机需要有出厂设置,出厂设置会将最基本的东西进行初始化,保证后续的使用.------------------>构造
当你需要处理手机时,需要将你以前所有使用过的记录清理调用. --> ---------------------------------------------析构---
1、构造函数:
对成员属性进行初始化的函数,未初始化的属性值是未知,使用有危险性。
2、析构函数:|
在对象销毁之前,将对象中的成员属性进行释放(清理).
●构造函数
(1)编译器会自动进行调用,不需要手动调用.(编译器强制要求必须调用构造)
(2)如果代码中没有构造函数,则编译会自动提供(空实现! )
(3)构造函数定义方式:
1、 函数名与类名一致
2、函数没有返回值,也没有void
3、可以用参数,可以重载
(4)调用时机:在实例化一个新对象时,构造函数会自动调用.
(5)构造函数分类:
(1)无参构造:函数没有参数;
{
类名()
{
}
}
在实例化对象时,如果对象没有参数,则调用该构造。
(2)带参构造;(构造函数可以设置一个或者多个参数)
{
类名(<参数类型> <参数名>………)
}
(3)拷贝构造:
●析构函数
(1)编译器会自动进行调用,不需要手动调用.(编译器强制要求必须调用析构)
(2)如果代码中没有构造函数,则编译会自动提供(空实现! )
(3)析构函数定义方式:
1、函数名与类名一致,但是在函数名前需要添加~符号,~类名()
2、函数没有返回值,也没有void
3、不能有参数,意味着不可以重载
(4)调用时机: ==在即将被对象被销毁之前,析构函数会自动调用,用于清理成员属性==
●定义方式:
~类名()
{
释放堆空间上的成员属性。Delete
}
__________________________________________
代码:
#include <iostream>
using namespace std;
class Hero
{
public:
Hero()
{
name=" ";
attack=0;
cout<<"构造函数"<<endl;
}
Hero(string name1)
{
name=name1;
cout<<"带参数构造函数"<<endl;
}
~Hero()
{
cout<<"析构函数"<<endl;
}
string name;
int attack;
};
int main(int argc, char *argv[])
{
Hero He1; //构造函数
Hero He2; //析构函数
Hero He3("tom"); //带参数构造函数
cout<<He1.attack<<endl;
cout<<He2.attack<<endl;
cout<<He3.name<<endl;
return 0;
}