友元関数と演算子の再ロード
1315 ワード
ゆうげんかんすう
友元関数はC++のメカニズムであり、クラスのメンバー関数ではありませんが、クラスのプライベート変数にアクセスできるため、パッケージの特性をある程度破壊します.
友元類
あるクラスでfriendキーワードで別のクラスの宣言を修飾すると、そのクラスはこのクラスの友元クラスになります.別のクラスは、このクラスのプライベート属性にアクセスできます.
演算子の再ロード
演算子のリロードは、グローバル関数演算子のリロードとメンバー関数演算子のリロードに分けられます.
3つのステップに分けられます. operatorキーワードでリロードする演算子を修飾します. は、戻り値がオブジェクト、参照、またはアドレスであることを決定する. グローバル演算子リロードthisポインタというパラメータは含まれず、メンバー関数演算子リロードパラメータ を含む
メンバー関数で演算子をリロードする場合、左のオペランドであればthisポインタで制御するだけです~
友元関数が演算子を再ロードする一般的なアプリケーションシーンは、cinオブジェクトとcoutオブジェクトが露出していないため、友元のような方法で所望の機能を実現するしかありません.
友元関数は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つのステップに分けられます.
#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オブジェクトが露出していないため、友元のような方法で所望の機能を実現するしかありません.