friend ostream &operator<<(ostream &os, const CSnmpMaintenanceSwitch &sw);
4 に答える
つまり、最初のパラメーターとして ostream & を、2 番目のパラメーターとして const CSnmpMaintenanceSwitch & を受け取るオペレーター << (確かにグローバル名前空間または現在のクラスの名前空間) が存在し、このオペレーターがあなたのプライベート メンバーにアクセスできることを意味します。現在のクラス (これは確かに CSnmpMaintenanceSwitch です)
文字通り?これは、左側に<<
an があり、右側に a がある独立した演算子の宣言です。式は参照を生成します。ostream
CSnmpMaintenanceSwitch
ostream
意味的に?ストリーム挿入演算子です。どのように言うことができるか知っていますstd::cout << someString;
か?まあ、それはどこかに、という宣言があるからostream& operator<<(ostream& os, const string &str);
です。あなたが尋ねている行は、ほぼ確実にCSnmpMaintenanceSwitch
クラスで見つかり、そのオペレーターにそれらのオブジェクトの1つを出力するために必要なアクセスを与えます. だから今、あなたもstd::cout << mySnmpMaintenanceSwitch;
同じように言うことができます。
この行は、インスタンスへの参照と のインスタンスへの定数参照のoperator<<
2 つのパラメータを取る を宣言します。のインスタンスに関する情報を次のような出力ストリームに書き込むことができますstd::ostream
CSnmpMaintenanceSwitch
CSnmpMaintenanceSwitch
operator<< ( std::cout , CSnmpMaintenanceSwitchInstance );
また
std::cout << CSnmpMaintenanceSwitchInstance;
Operator は、friend
のプライベートおよび保護されたメンバーにアクセスできるように宣言されていますCSnmpMaintenanceSwitch
。
のデフォルトの性質により、出力ストリームを変更する必要があるため(一部のデータが書き込まれる)、最初のパラメータは非定数参照として宣言されますoeprator<<
。
operator<<
2 番目のパラメーターは、変更してはならないため (既定の性質により) 、定数参照として宣言されます。
そのまま宣言されている理由friend
は、オーバーロードされた演算子でいくつかのプライベート変数に直接アクセスして使用したい場合があるためです。
CSnmpMaintenanceSwitch
オブジェクトを として与えるためconstant reference
、プライベート データを変更しないことが隔離されます。