友元関数と演算子の再ロード

1315 ワード

ゆうげんかんすう
友元関数はC++のメカニズムであり、クラスのメンバー関数ではありませんが、クラスのプライベート変数にアクセスできるため、パッケージの特性をある程度破壊します.
class T
{
public:
    T(int a, int b):
    _a(a),
    _b(b)
    {
        
    }
    
firend void Change(T& , int);
private:
    int _a;
    int _b;
};

void Change(T& t1, int a)
{
    t1._a = a;
}


友元類
あるクラスでfriendキーワードで別のクラスの宣言を修飾すると、そのクラスはこのクラスの友元クラスになります.別のクラスは、このクラスのプライベート属性にアクセスできます.
演算子の再ロード
演算子のリロードは、グローバル関数演算子のリロードとメンバー関数演算子のリロードに分けられます.
3つのステップに分けられます.
  • operatorキーワードでリロードする演算子を修飾します.
  • は、戻り値がオブジェクト、参照、またはアドレスであることを決定する.
  • グローバル演算子リロードthisポインタというパラメータは含まれず、メンバー関数演算子リロードパラメータ
  • を含む
    #include 
    
    using namespace std;
    
    class T
    {
    public:
    	T(int a = 0, int b = 0)
    	{
    		_a = a;
    		_b = b;
    	}
    public:
    	friend T& operator--(T&);
    	int getA()
    	{
    		return _a;
    	}
    	int getB()
    	{
    		return _b;
    	}
    	//    ++  
    	T& operator++()
    	{
    		this->_a++;
    		this->_b++;
    		return *this;
    	}
    	//  ++  ,           
    	T operator++(int)
    	{
    		T tmp(*this);
    		this->_a++;
    		this->_b++;
    		return tmp;
    	}
    private:
    	//    
    	friend ostream& operator<

    メンバー関数で演算子をリロードする場合、左のオペランドであればthisポインタで制御するだけです~
    友元関数が演算子を再ロードする一般的なアプリケーションシーンは、cinオブジェクトとcoutオブジェクトが露出していないため、友元のような方法で所望の機能を実現するしかありません.