C++静的メンバーと友元

3180 ワード

静的メンバー
静的変数の初期化(定義方法)
#include
using namespace std;
class Student
{
    static int num;
public:
    Student()
    {
        num++;
    }
    ~Student()
    {
        num--;
    }
    int getnum()
    {
        return num;
    }
};
int Student::num=0;
int main()
{
    Student t1;
    Student t2;
    Student *t3=new Student;
    cout<
  • static int getnum()/静的メンバー関数
  • #include
    using namespace std;
    class Student
    {
        static int num;
    public:
        Student()
        {
            num++;
        }
        ~Student()
        {
            num--;
        }
        static int getnum()
        {
            return num;
        }
    };
    int Student::num=0;
    int main()
    {
        cout<
  • 静的メンバー関数は、静的メンバー変数
  • のみを操作できます.
  • 第1種
  • #include
    using namespace std;
    class Student
    {
        static int num;
        int id;
    public:
        Student()
        {
            num++;
        }
        ~Student()
        {
            num--;
        }
        int getnum()
        {
            int id=0;
            return num;
        }
    };
    int Student::num=0;
    int main()
    {
    //  cout<
  • 第2種(静的メンバー関数は静的メンバー変数のみを操作できる)(この使用を推奨)
  • #include
    using namespace std;
    class Student
    {
        static int num;
        int id;
    public:
        Student()
        {
            num++;
        }
        ~Student()
        {
            num--;
        }
        int getid()
        {
            id=0;
            return id;
        }
        static int getnum()
        {
            return num;
        }
    };
    int Student::num=0;//          ,       
    int main()
    {
    //  cout<

    まとめ
  • 静的データメンバーが比較的多く使用されている場所
  • 静的メンバー関数は、非静的メンバー変数
  • にアクセスできません.
    友元
    #include
    using namespace std;
    class Student
    {
        int m_id;
    public:
        Student(int id)
        {
            m_id=id;
        }
        friend void test(Student t);//      ;
    };
    void test(Student t)
    {
        cout<

    友類
    #include
    using namespace std;
    class Student
    {
        int m_id;
    public:
        Student(int id)
        {
            m_id=id;
        }
        friend class A;
    };
    class A
    {
    public:
        void test(Student t)
        {
            cout<
  • 友元は
  • を伝えることができません
    #include
    using namespace std;
    class Student
    {
        int m_id;
    public:
        Student(int id)
        {
            m_id=id;
        }
        friend class B;
        friend class A;
    };
    class B
    {
        friend class A;
    }
    class A
    {
    public:
        void test(Student t)
        {
            cout<
  • 奇妙なプログラム
  • #include
    using namespace std;
    class Student;
    class A
    {
    public:
        void test(Student t);
    };
    class Student
    {
        int m_id;
    public:
        Student(int id)
        {
            m_id=id;
        }
        friend void A::test(Student t);
    };
    
    void A::test(Student t)
    {
        cout<

    ゆうげんかんすう
    友元が必要な理由
  • では、通常の関数がクラスの保護またはプライベートデータメンバーに直接アクセスする必要がある場合があります.
  • が友元を必要とするもう1つの理由は、オペレータの再ロードを容易にするためである.
  • 友元関数はメンバー関数ではなく、クラスの友達であるため、クラスのすべてのメンバーにアクセスできます.
  • クラスの内部では、その関数のプロトタイプを宣言し、friendキーワードを加えるしかない.

  • 友元の使用
  • クラスに普通の関数を宣言し、キーワードfriendを付けると、クラスの友元となり、クラスのすべてのメンバーにアクセスできます.
  • クラスのメンバー関数は、別のクラスの友元であってもよい.