运算符重载函数
为了增强程序的可读性,C++支持运算符重载。
运算符重载特征:
1. operator+合法的运算符构成函数名(重载<运算符的函数名:operator<)。
2. 重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。
5个C++不能重载的运算符: .*/::/sizeof/?:/.
赋值运算符重载
拷贝构造函数是创建的对象,使用一个已有对象来初始化这个准备创建的对象。
赋值运算符的重载是对一个已存在的对象进行拷贝赋值
深入探究构造函数
#include<iostream>
using namespace std;
class Time
{
public:
Time() //构造函数
{
cout<<"Time()"<<endl;
_hour=0;
_minute=0;
_second=0;
}
Time(const Time& t) //拷贝构造函数
{
cout<<"Time(const Time& d)"<<endl;
_hour=t._hour;
_minute=t._minute;
_second=t._second;
}
Time& operator=(const Time& t) //赋值函数重载
{
cout<<"opeator()"<<endl;
if(this!=&t)
{
_hour=t._hour;
_minute=t._minute;
_second=t._second;
}
return *this;
}
~Time() //析构函数
{
cout<<"~Time()"<<endl;
}
private:
int _hour;
int _minute;
int _second;
};
class Data
{
public:
//构造函数体内进行赋值
Data(int year,int month,int day,const Time& t)
{
cout<<"Data(),赋值形式"<<endl;
_year=year;
_month=month;
_day=day;
_t=t;
}
//初始化参数列表
// Data(int year,int month,int day,const Time& t)
//
//
// :_year(year)
// ,_month(month)
// ,_day(day)
// ,_t(t)
// {
// cout<<"Data()参数列表形式"<<endl;
//
// }
// }
void Display()
{
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
private:
int _year;
int _month;
int _day;
Time _t;
};
void Test()
{
Time t1;
Data d1(2018,1,1,t1);//调用构造函数
d1.Display();
}
Time()
Time()
Data(),赋值形式
opeator()
2018-1-1
~Time()
~Time()
初始化顺序
[zyc@localhost lession_class]$ ./a.out
Data()
0-4196336-2018
~Data()
const修饰成员函数
class Data
{
public:
Data(int year=1999,int month=2,int day=10)
:_year(year)
, _month(month)
,_day(day)
{
cout<<"data()"<<endl;
}
void Display()
{
cout<<"Display()"<<endl;
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
void Display()const
{
cout<<"Display()const"<<endl;
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
~Data()
{
cout<<"~Data()"<<endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data d1;//调用构造函数
d1.Display();
const Data d2;
d2.Display();
return 0;
}