美文网首页上嵌学习笔记
C++基础-(静态成员和友元)

C++基础-(静态成员和友元)

作者: I踏雪寻梅 | 来源:发表于2016-11-10 21:22 被阅读11次

    C++基础

    静态成员和友元

    • static:标志静态成员
    • friend:标志友元
    #include <iostream>
    using namespace std;
    //+int num;使用全局变量
    class Student
    {   //-int num;
        static int num;
        int id;
        public:
            Student()
            {
        
                //-num=0;每执行一次Student都会重归为0,最后结果为1,1
                num++;
            }
            ~Student()
            {
                num--;
            }
            int getId()
            {
                id=0;
                return num;
            }   
            static int getNum()
            {
                //id=0;//在此处id为int类型,不能在此修饰.一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。
                return num;
            }
    };
    int Student::num=0;//初始化一定要在外面
    int main()
    {
    //  cout<<"student num0="<<Student::getNum()<<endl;
        Student t1;
        Student t2;
        Student *t3=new Student;
        cout<<"student num1="<<t1.getNum()<<endl;
        delete t3;
        cout<<"student num2="<<t1.getNum()<<endl;
    //  cout<<"student num0="<<Student::getNum()<<endl;
    }
    
    • 静态数据成员用得比较多的场合一般为:
      • 用来保存流动变化的对象个数
      • 作为一个标志,指示一个特定的动作是否发生
      • 一个指向一个链表第一个成员或最后一个成员的指
    • 静态成员函数
      • 静态成员函数定义是类的内部实现,属于类定义的一部分。它的定义位置与一般成员函数一样。
      • 一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。

    友元

    #include <iostream>
    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<<"id="<<t.m_id<<endl;//m_id是受保护的私有的,所以不用friend会出错。
    }
    int main()
    {   
        Student t1(10);
        test(t1);
    }
    
    • 友类
    #include <iostream>
    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<<"id="<<t.m_id<<endl;
            }
    };
    int main()
    {   
        Student t1(10);
        A a;
        a.test(t1);
    }
    
    #include <iostream>
    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<<"id="<<t.m_id<<endl;
    }
    int main()
    {   
        Student t1(10);
        A a;
        a.test(t1);
    }
    
    • 朋友的朋友不是朋友
    class S
    {
        friend B;
        //friend B;
        //friend A;//可过
    }
    Class B
    {
        friend A;
        
    }
    class A
    {}
    

    相关文章

      网友评论

      本文标题:C++基础-(静态成员和友元)

      本文链接:https://www.haomeiwen.com/subject/wuixpttx.html