リロード++オペレータのいくつかの悟り

1347 ワード

久しぶりにまとめました.1週間以上すれば実習を終えることができます.ちょうどこの時間に暇があって、以前の学習ノートを整理し始めました.ははは、復習にしましょう.
この1篇はC++リロードオペレータについて书いて、コードは比较的に简単で、++を例にして、その他も共通しています.
#include <iostream>

using namespace std;

class DefType{

	//ostream    ,    cout      。        <<   

	//         os t,   <<        

	//  os              ?   ?

	friend ostream& operator<<(ostream& os, const DefType& t)

	{

		return os<<t.m_iVale<<endl;

	}

	int m_iVale;

public:

	//        

	explicit DefType(int i = 0):m_iVale(i){}

	//prefix++,  、  

	//          

	DefType& operator++()

	{

		++(this->m_iVale);

		return *this;

	}

	//postfix++,  、  

	//         const,         int,         :

	//error C2807: the second formal parameter to postfix 'operator ++' must be 'int'

	const DefType operator++(int)

	{

		DefType tmp = (*this);

		//    ,       

		++(*this);

		return tmp;

	}

};

int main()

{

	DefType dt(100);

	cout<<dt++;//         ,    100

	cout<<++dt;//         ,    102

	cout<<dt.operator++();//         ,    103

	cout<<dt.operator++(0);//         ,    103

	return 0;

}

小結:1)前置と後置の戻りタイプが異なる場合.
2)後置にはパラメータタイプintが付いていますが、使用されません.コンパイラを付けないとC 2807エラーが表示されます.
3)前置は後置よりも効率的です.後置は一時オブジェクトを導入し、前置のリロードインプリメンテーションを呼び出します.