目录
1.类的6个默认成员函数
2.构造函数
2.2 概念
2.3 特性
3.析构函数
3.1 概念
3.2 特性
1.类的6个默认成员函数
如果一个类一个成员都没有,那么这个类就是空类。但空类并非什么都没有,编译器会对任何一个类都生成六个默认成员函数。
2.构造函数
2.2 概念
对于一个类的创建通常都伴随着初始化,但是有时候自己可能会忘记调用初始化函数,这时候C++提供了能自动调用的函数来完成类对象的初始化,这个函数就叫构造函数。
编译器会提供默认的构造函数,如果自己写了构造函数,编译器就会使用自己写的。
2.3 特性
构造函数的函数名与类名相同,在自己定义构造函数时,应该这么写
class Date
{
public:
Date(int year = 2024, int month = 2, int day = 15)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
构造函数不用写返回值类型(并且也没有返回值类型),形参列表可以任意指定形参。
除了不写返回值类型和函数名必须与类名相同之外,构造函数就和普通成员函数在定义时没有区别,同样可以重载,使用缺省值等。
C++11中,构造函数的缺省值可以不给在形参列表,而直接写在成员后,即内置类型成员变量声明时可以给默认值
class Date
{
public:
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year = 2024;
int _month = 2;
int _day = 15;
};
而且直接给在成员后也可以让编译器自动生成的默认函数使用这些缺省值。
也就是说,像这样写并不意味着在创建类对象时,成员变量就已经定义出来(在内存中开辟了一块存放成员变量的空间),而是用这些值作为构造函数形参的缺省值去初始化。
C++ 11 支持这么写主要是为了弥补之前标准中编译器生成的默认构造函数不会处理内置类型(即非自定义类型,如int,double,bool,char等),只会处理自定义类型。而在C++ 11中打上了这个补丁,让人用起来更加便利了。
3.析构函数
3.1 概念
已经学过构造函数了,与之相反,析构函数会清理类中的资源,比如类中指向一块动态开辟出的空间的指针,会释放这块空间。注意,析构函数并不是完成对类对象本身的销毁,而是清理类对象中资源的清理。
3.2 特性
析构函数是特殊的成员函数,特征:
1. 析构函数名是在类名前加上字符 ~。
2. 无参数无返回值类型。
3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构
函数不能重载
4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。
class Date
{
public:
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
~Date()
{
}
private:
int _year = 2024;
int _month = 2;
int _day = 15;
};