C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で「友達」を使用する必要があるのはいつですか?


クラスのフレンド関数はそのクラスのスコープ外で定義されていますが、クラスのすべてのプライベートメンバーと保護されたメンバーにアクセスする権利があります。フレンド関数のプロトタイプはクラス定義に表示されますが、フレンドはメンバー関数ではありません。

フレンドは、関数、関数テンプレート、メンバー関数、またはクラスまたはクラステンプレートにすることができます。この場合、クラス全体とそのすべてのメンバーがフレンドになります。

関数をクラスのフレンドとして宣言するには、次のように、クラス定義の関数プロトタイプの前にキーワードfriendを付けます-

class Box {
   double width;
   public:
   double length;
   friend void printWidth( Box box );
   void setWidth( double wid );
};

ClassTwoクラスのすべてのメンバー関数をClassOneクラスのフレンドとして宣言するには、ClassOneクラスの定義に次の宣言を配置します

friend class ClassTwo;  
For example,

#include <iostream>
using namespace std;
class Box {
   double width;
   public:
   friend void printWidth( Box box );
   void setWidth( double wid );
};

// Member function definition
void Box::setWidth( double wid ) {
   width = wid;
}

// Note: printWidth() is not a member function of any class.
void printWidth( Box box ) {
   /* Because printWidth() is a friend of Box, it can
   directly access any member of this class */
   cout << "Width of box : " << box.width <<endl;
}

// Main function for the program
int main() {
   Box box;

   // set box width without member function
   box.setWidth(10.0);

   // Use friend function to print the wdith.
   printWidth( box );

   return 0;
}
出力 これにより出力が得られます-

Width of box: 10

関数はクラスのメンバーではありませんでしたが、そのクラスのメンバー変数に直接アクセスできました。これは、特定の状況で非常に役立ちます。


  1. JavaScriptの矢印関数を使用すべきでない場合は?

    矢印関数には独自のこれがないため、矢印関数をオブジェクトメソッドとして使用しないでください。オブジェクト自体ではなく、ウィンドウオブジェクトである囲んでいる字句スコープのこの値を取ります。これにより、目的のオブジェクトではなくウィンドウオブジェクトのプロパティを設定してアクセスするため、問題が発生する可能性があります。 以下は、JavaScriptの矢印関数を使用すべきでない場合を示すコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

  2. HDMIスプリッターとスイッチ:いつ使用する必要がありますか?

    最近、私たちのビジュアルおよびオーディオエンターテインメントの多くはHDMIを利用しています。 SCARTプラグをいじったり、VGAケーブルを設定したりする必要はもうありません。 HDMIケーブルを両端に差し込むだけで準備完了です! ただし、HDMI管理をさらに細かく制御できる小型のデバイスを購入できることをご存知ですか?これらは「スプリッター」および「スイッチ」と呼ばれ、HDMI出力を整理する上で重要な役割を果たします。 これらの両方が何であるか、そしてそれらがどのように役立つかを見てみましょう。 HDMIスプリッターの使用方法 HDMIスプリッターは1つのジョブを実行します。つまり