类的默认成员函数
一. 类的六个默认成员函数:
1、构造函数 2、拷贝构造函数 3、析构函数 4、赋值操作符重载 5、取地址操作符重载 6、const修饰的取地址操作符重载
【构造函数】
成员变量为私有的,要对他进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数为构造函数(constructor)。
(1)函数名与类名相同。
(2)无返回值。
(3)构造函数可以重载。
(4)构造函数可以在类中定义,也可以在类外定义。
(5)如果类定义中没有给出构造函数,则C++编译器自动产生一个缺省的构造函数,但只要我们定义了一个构造函数,系统就不会自动产生缺省的构造函数。
(6)对象构造时(对象实例化)系统自动调用对应的构造函数。
(7)无参的构造函数和缺省值的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个。拷贝构造函数
创建对象时使用同类对象来进行初始化,这是用的构造函数称为拷贝构造函数,他是特殊的构造函数。
(1)拷贝构造其实是构造函数的重载。
(2)拷贝构造函数的参数必须使用引用传参,使用传值会应发无穷的递归效应。
(3)若未显示定义,系统会默认缺省的拷贝构造函数,缺省的拷贝构造函数,会以此拷贝类成员进行初始化。
注:在类的成员函数中可以直接访问同类对象的私有/保护成员。2.C++的访问限定符是以类为单位的,也就是说在这个单位内的成员可以互相访问。
析构函数:
当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数(destructor).
(1)析构函数在类名加上字符~。(2)析构函数无参数,无返回值。
(3)一个类有且只有一个析构函数,若未显示定义,系统会自动生成缺省的析构函数。
(4)对象生命周期结束时,C++编译系统自动调用析构函数。
(5)主义析构函数体内并不是删除对象,而是做一些清理工作。
class Date
{
public:
Date(int size)
{
ptr = (int*)malloc(size* sizeof(int));
}
~Date()//完成清理工作,(释放空间)
{
if(ptr)
{
free(ptr);
ptr = 0;
}
}
private:
int _year;
int _month;
int _day;
};
运算符重载
为了增强程序的可读性,C++支持运算符的重载。特征:
(1)operator+合法的运算符构成函数名(重载<运算符的函数名:operator<).
(2)重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。
5个C++不能重载的运算符: