リロード++オペレータのいくつかの悟り
1347 ワード
久しぶりにまとめました.1週間以上すれば実習を終えることができます.ちょうどこの時間に暇があって、以前の学習ノートを整理し始めました.ははは、復習にしましょう.
この1篇はC++リロードオペレータについて书いて、コードは比较的に简単で、++を例にして、その他も共通しています.
小結:1)前置と後置の戻りタイプが異なる場合.
2)後置にはパラメータタイプintが付いていますが、使用されません.コンパイラを付けないとC 2807エラーが表示されます.
3)前置は後置よりも効率的です.後置は一時オブジェクトを導入し、前置のリロードインプリメンテーションを呼び出します.
この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)前置は後置よりも効率的です.後置は一時オブジェクトを導入し、前置のリロードインプリメンテーションを呼び出します.