指派運算符重載
1.運算符重載
C++為了增強代碼的可讀性引入了運算符重載,運算符重載是具有特殊函數名的函數,也具有其傳回值類 型,函數名字以及參數清單,其傳回值類型與參數清單與普通的函數類似。
函數名字為:關鍵字operator後面接需要重載的運算符符号。
注意:
- 不能通過連接配接其他符号來建立新的操作符:比如operator@
- 重載操作符必須有一個類類型或者枚舉類型的操作數
- 用于内置類型的操作符,其含義不能改變,例如:内置的整型+,不能改變其含義
- 作為類成員的重載函數時,其形參看起來比操作數數目少1成員函數的。操作符有一個預設的形參this,限定為第一個形參
- .* 、:: 、sizeof 、?: 、. 注意以上5個運算符不能重載。這個經常在筆試選擇題中出現。
函數原型:傳回值類型 operator操作符(參數清單)
2.指派運算符重載
class Date
{
public:
Date(int year = 1990, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
Date& operator=(const Date& d)
{
if (this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
}
private:
int _year;
int _month;
int _day;
};
指派運算符主要有四點:
- 參數類型
- 傳回值
- 檢測是否給自己指派
- 傳回*this
- 一個類如果沒有顯示定義指派運算符的重在,編譯器也會生成一個,完成對象按位元組序的值拷貝
const成員
1.const修飾類的成員函數
将const修飾的類成員函數稱之為const成員函數,const修飾類成員函數。實際修飾該成員函數隐含的this指針,表明在該成員函數中不能對類的任何成員進行修改。

讓我們看看下面的代碼:
class Date
{
public:
void Display()
{
cout << "Display ()" << endl;
cout << "year:" << _year << endl;
cout << "month:" << _month << endl;
cout << "day:" << _day << endl << endl;
}
void Display()const
{
cout << "Display ()" << endl;
cout << "year:" << _year << endl;
cout << "month:" << _month << endl;
cout << "day:" << _day << endl << endl;
}
private:
int _year;
int _month;
int _day;
};
void Test()
{
Date d1;
d1.Display();
const Date d2;
d2.Display();
}
const對象可以調用非const成員函數嗎?
不可以
非const對象可以調用const成員函數嗎?
可以
- const成員函數可以調用其他非const成員函數嗎?
- 非const成員函數可以調用其他const成員函數嗎?