詳しくはC++の友元

3416 ワード

C++の友元をわかりやすく話すために、私はこの地球上の不思議な生物--女から話しました.周知のように、女性が他の人に知られたくない2つの秘密は、1つは年齢で、もう1つは体重です(もう何年も知っていますが、まだ分かりません.なぜ女性は他の人に年齢と体重を知られたくないのか、これは重要ですか?)今、私たちはこの特性に基づいて、ガールフレンドクラスを作成します.なぜなら、女性は年齢や体重を他人に知られたくないからです.つまり、この2つの変数はprivate変数であり、外部から勝手にアクセスできないことを意味します.次に、このクラスの作成を開始します.
class Girlfriend{
private:
    int age;
    int weight;
    public:
    Girlfriend ( int age, int weight ){

        this->age = age;
        this->weight = weight;
    }
    int GetAge ( void ){

        return this->age;
    }
    int GetWeight ( void ){
        return this->weight;
    }

};

今、私たちはもう「彼女」という類を持っています.プログラムを書くコード畜にオブジェクトがない以上、このクラスに基づいてオブジェクトを作成します.
Girlfriend Alice;

今、私たちはもうアリスという相手がいます.例えば、私たちは今他の人がAliceの年齢、体重を知りたいと思っています.見て、彼女は同意しますか?
printf ( "Alice's age is %d
", Alice.age ); printf ( "Alice's weight is %d]n", Alice.weight );

実行後、プログラムが間違っていることに気づきました.もちろん間違いを報告します.あなたは誰だと思っていますか.彼女の体重を知りたいなら彼女の体重を知っています.彼女の年齢を知りたいなら彼女の年齢を知っています.夢を見ないでください.彼女はあなたに教えません.しかし、本当に彼女の年齢を直接得ることはできないのだろうか.もちろんいいえ、彼女は私が作った相手です.では、私は彼女のボーイフレンドです.彼女のボーイフレンドである以上、私は彼女の年齢と体重を直接知ることができるはずです.へへへ!だから、今、boyfriend関数を書きます.
void boyfriend ( const Grilfriend& girlfriend );

今、このグローバル関数があれば、アクセスできるでしょう.やってみよう:残念ながら、自分のボーイフレンドでも彼女の体重や年齢を訪問できないのはひどいでしょう.どうしてこんなことができるの?しかし、よく考えてみると、世の中の男がこんなに多くて、あなたは彼女のボーイフレンドで、それは彼女の同意を得たためで、もし彼女が同意しなければ、あなたはどうして彼女のボーイフレンドになることができて、だから、あなたは今また彼女の同意を通過しなければなりません.では、どうすればいいのでしょうか.friendを使います.Girlfriendというクラス内でこのboyfriendという関数を友元関数として宣言します.
friend void boyfriend ( const Girlfriend& girlfriend );

クラス内でこの友元関数を宣言した後、クラス外で実装すればいいです.コードは次のとおりです.
void boyfriend ( const Girlfriend& girlfriend ){
    printf ( "my girlfriend's old is %d
", girlfriend.age ); printf ( "my girlfriend's weight is %d
", girlfriend.weight ); }

メイン関数ではAliceというオブジェクトを作成して初期化しました
Girlfriend Alice( 20, 105 );

今、私はボーイフレンドとして、彼女のAliceの年齢と体重を訪問します.
boyfriend( Alice );

これでいいです.では、実行結果を見てみましょう.ああ、ボーイフレンドとしてはこのような権利があるようです.
完全なコードは次のとおりです.
#include 
#include 

class Girlfriend{
private:
    int weight;
    int age;
public:
    Girlfriend ( int weight, int age ){
        this->weight = weight;
        this->age = age;
    }
    int GetWeight ( void ){
        return this->weight;
    }
    int GetAge ( void ){
        return this->age;
    }
    friend void  boyfriend ( Girlfriend& girlfriend );
};
void boyfriend ( Girlfriend& girlfriend ){

    printf ( "my girlfriend's weight is %d
", girlfriend.weight ); printf ( "my girlfriend's age is %d
", girlfriend.age ); } int main ( int argc, char** argv ){ Girlfriend Alice( 105, 20 ); //printf ( "my girfriend Alice's weight is %d
", Alice.weight ); //printf ( "my girfriend Alice's age is %d
", Alice.age ); boyfriend( Alice ); system ( "pause" ); return 0; }

PS:この文章、私はすでに书いたのが比较的に分かりやすくなったと思って、この文章を読んだ友达、各位の大物达を望んで、ついでにほめて、支持を表すことができます.ありがとう!
ようこそご褒美を!ハハハハ!
これらのチュートリアルはすべてとても良くて、興味のある大物は私のQRコードで購入することができて、感謝します!
転載先:https://blog.51cto.com/chen0547/2053705