美文网首页
C++ STATIC

C++ STATIC

作者: 猩猩隊長 | 来源:发表于2018-11-04 22:25 被阅读0次

    静态数据成员

    静态成员可实现多个对象间的数据共享,不会破坏隐藏的原则
    静态成员是类的所有对象共享的成员,而不是某个对象的成员
    静态数据成员可以节省内存
    静态数据成员在定义或说明时前面加关键字static

    初始化的格式
    <数据类型><类名>::<静态数据成员名>=<值>
    

    注意事项

    1.初始化在类体外进行,而前面不加static
    2.初始化时不加该成员的访问权限控制符private,public等
    3.初始化时使用作用域运算符来标明它所属类
    4.静态数据成员是类的成员,而不是对象的成员
    5.静态数据成员是静态存储,静态生存期,必须初始化

    引用静态数据成员时,采用如下格式
    <类名>::<静态成员名>
    

    示例:

    #include <iostream>
    using namespace std;
    
    class CStatic
    {
    public:
        CStatic(int a, int b, int c);
        void GetNumber();
        void GetSum();
    private:
        int A, B, C;
        static int Sum;
    };
    
    int CStatic::Sum = 0; //静态数据成员类外且必须初始化
    
    CStatic::CStatic(int a, int b, int c)
    {
        A = a;
        B = b;
        C = c;
        Sum += A + B + C;
    }
    
    void CStatic::GetNumber()
    {
        cout << "Number=" << A << "," << B << "," << C << endl;
    }
    
    void CStatic::GetSum()
    {
        cout << "Sum=" << Sum << endl;
    }
    
    void main()
    {
        CStatic M(3, 7, 10), N(14, 9, 11);
        M.GetNumber();
        N.GetNumber();
    
        /*M和N的GetSum()成员函数都会打印54
        说明静态成员变量对2个对象都有效
        也说明静态成员属于类,而不是某个特定的对象*/
        M.GetSum(); //54
        N.GetSum(); //54
        system("pause");
    }
    

    静态成员函数

    和静态数据成员一样都属于类的静态成员,都不是对象成员
    引用不需要用对象名
    函数的实现中不能直接引用类中说明的非静态成员
    可以引用类中说明的静态成员
    若静态成员函数中要引用非静态成员时,可通过对象来引用

    静态成员函数使用如下格式
    <类名>::<静态成员函数名>(<参数表>);
    

    示例

    #include <iostream>
    using namespace std;
    
    class M
    {
    public:
        M(int a)
        {
            A = a;
            B += a;
        }
        static void f1(M m);
    private:
        int A;
        static int B;
    };
    
    void M::f1(M m)
    {
        cout << "A=" << m.A << endl;
        cout << "B=" << B << endl;
    }
    
    int M::B = 0;
    void main()
    {
        M P(5), Q(10);
        M::f1(P); //调用时不用对象名
        M::f1(Q);
        system("pause");
    }
    

    相关文章

      网友评论

          本文标题:C++ STATIC

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