1. 构造函数
如果类的成员变量为私有的,要对这些成员初始化必须调用一个共有的成员函数来进行.
这个共有的成员函数在定义对象的同时会自动执行一次,被调用的函数称为构造函数.
构造函数的特点:
1.函数名与类名相同.
2. 无返回值.
3.构造函数可以重载.
4.实例化对象时,系统调用相应的构造函数.
5.构造函数可以在类中定义,也可以在内外定义.
6.没有自定义构造函数,系统会给出默认的构造函数(缺省的构造函数).
7无参的构造函数和全缺省构造函数统认为是缺省构造函数,缺省函数只能出现一个.
2.拷贝(复制)构造函数
用一个已存在的对象初始化一个正在创建的对象,调用的构造函数就是拷贝构造函数。
Date(const Date &d)
:_year(d._year)
,_month(d._month)
,_day(d._day)
{
}
拷贝构造函数的特点:
1.拷贝构造函数是构造函数的重载.
2.拷贝构造函数的参数必须是引用,不能是值传递,负责会引发无穷递归.
原因:实参给形参传值会经过一个中间对象,而给中间对象传值又要经过一个中间对象......以此类推就会引发无 穷递归.
3.如果没有自定义拷贝构造函数,系统会给出默认的缺省拷贝构造函数.
3.析构函数
当一个对象的生命周期结束时,系统会自动调用一个成员函数,这个成员函数就是析构函数.
1.析构函数在类名前加上~。
2.析构函数无返回值.
3.析构函数没有参数.
4.析构函数不能重载.
5.构造函数被调用几次,析构函数就调用几次.
6.析构函数体内并不是删除了当前作用的对象,而是做了一些清理工作.
7.没有自定义析构函数,系统会给出默认的析构函数.
运算符重载特点:
1.operator+ 合法的运算符构成函数名.
2.重载运算符以后,不能改变运算符的优先级、结合性、操作数个数.
3. 运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止改变内置类型的函义。
以下5个不能重载的运算符:
. (成员访问运算符) .*(指针访问运算符) :: (与运算符) sizeof (大小运算符) ?: (条件运算符)
4. 赋值运算符重载
对一个已经存在的对象进行拷贝赋值(与拷贝构造函数不同).
Date& operator=(const Date &d)
{
if(this!=&d)
{
_year=d._year;
_month=d._month;
_day =d._day;
}
return *this;
}
5.取地址运算符重载
Date* operator &()
{
return this;
}
6.const修饰的取地址运算符重载
const Date * operator& () const
{
return this;
}