天天看點

指派運算符重載

指派運算符重載

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;
};
           

指派運算符主要有四點:

  1. 參數類型
  2. 傳回值
  3. 檢測是否給自己指派
  4. 傳回*this
  5. 一個類如果沒有顯示定義指派運算符的重在,編譯器也會生成一個,完成對象按位元組序的值拷貝

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();
}
           
  1. const對象可以調用非const成員函數嗎?

    不可以

  1. 非const對象可以調用const成員函數嗎?

    可以

  1. const成員函數可以調用其他非const成員函數嗎?
  1. 非const成員函數可以調用其他const成員函數嗎?

取位址及const取位址操作符重載