对象的生命周期
一、构造函数
1什么是构造函数
是一种特殊的类成员函数,主要用于在创建对象的时候初始化对象
2构造函数的创建方法
1函数名:与类名完全一致
2返回值类型:没有
3.可以重载
~~~c++
#include<iostream>
using namespace std;
class MyC``lass
{
public :
int num;
MyClass()
{
cout << "默认构造函数被调用" << endl;
}
MyClass(int num)
{
cout << " 构造函数1被调用" << endl;
}
MyClass(int num, char ch)
{
cout << " 构造函数2被调用" << endl;
}
};
int main()
{
MyClass myclass(50);
MyClass myclass1;
MyClass myclass2(50, 'c');
return 0;
}
~~~
4.在创建对象时会自动调用系统默认的构造函数(当你没有写构造函数的时候)
5.对于每一个对象,构造函数只会调用一次
6.当你现式声明了一个构造函数,系统就不会再提供默认的构造函数了
~~~c++
#include<iostream>
using namespace std;
class Class
{
public :
Class();//声明一个构造函数
};
//在类外面实现构造函数
Class::Class()
{
cout << "构造函数" << endl;
}
int main()
{
Class Class;
return 0;
}
~~~
3构造函数的调用时机
在创建对象时调用
4成员初始化列表
对于const成员,必须使用初始化列表赋值
~~~c++
#include<iostream>
using namespace std;
class MyClass
{
public :
int num;
MyClass(int n);
};
MyClass::MyClass(int n) :num(n)//成员初始化列表 在后面加一个:引用待初始化的成员
{
this->num = n;
cout << num << endl;
}
int main()
{
MyClass Class1(55);//传一个值
return 0;
}
~~~
二、析构函数
1什么是析构函数
析构函数与构造函数相反,是对构造函数申请的空间进行释放
也是一种特殊的类成员函数
2怎么定义一个析构函数
1.函数名:~类名
2.无返回值
3.不能重载(只能有一个析构函数)
4.有默认的析构函数提供
3析构函数的调用时机
当程序delete时。
注意:
对于申请在堆区的内存,不会自动的调用析构函数,只有自己手动的释放才会调用
对于调用构造函数的内存,先构造的后释放.
4析构函数的特点
1功能:不会释放对象
2.不能重载
3.系统会默认提供一个
三、this指针
1什么是this指针
本质上是一个指针,是系统自动生成并且隐藏的,并不是对象的一部分,其作用域为类的内部
2使用
~~~c++
#include<iostream>
using namespace std;
class MyClass
{
public :
int num;
MyClass(int num)
{
this->num = num;
cout << num << endl;//当函数调用存在歧义时,即两个相同的变量名,必须用this指针指向类里面的那个成员
}
};
int main()
{
MyClass myclass(50);
return 0;
}
~~~