• 静态成员和静态函数


    对于静态成员:
    1)一个类中可以有多个静态函数成员变量,所有的对象都共享这些静态成员变量,都可以引用它。
    2)static成员变量和普通static变量一样,都在内存分配区中的全局区分配内存,到程序结束时才释放,这就意味着,static成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。
    3)静态成员的初始化只能在类体外;初始化赋值,也可以不赋值,那么会被默认初始化为0.全局数据区的变量都有默认的出事值为0,而动态数据区(堆、栈区)变量的默认值是不确定的,一般认为是垃圾值。
    4)静态成员变量既可以通过对象访问,也可以通过类名访问,但要遵循private、protected和public关键字的访问权限限制。当通过对象名访问时,对于不同的对象,访问的是同一份内存。

    eg:

    ①、静态成员不能在类里面赋值

    ②、非静态函数可以调用静态函数

    ③、静态函数必须返回静态成员

    ④、静态函数不能调用非静态函数

    ⑤、私有静态变量可以通过公有静态函数访问

    ⑥、私有静态变量可以可以通过友元函数间接访问

    ⑦、全局静态成员是对象共享的

    ⑧、函数内的静态成员函数也是对象共享的

    #include <iostream>
    
    using namespace std;
    class A
    {
    private:
        static int b;
    public:
        //    static int a=10; 静态成员不能在类里面赋值 1
        static int a;
        int c=1;
    
        void ff()
        {
            static int d=10;
            cout<<"非静态函数,d:"<<d<<endl;
            d++;
            cout<<"调用静态函数,b:"<<fun()<<endl;//非静态函数可以调用静态函数 2
        }
    
        static int fun()
        {
            //        return b+c;  静态函数必须返回静态成员 3
            //        ff();   静态函数不能调用非静态函数 4
            return b;
        }
    
        friend int f(A);
    
    };
    int A::a=10;
    int A::b=20;
    
    int f(A a)
    {
        return a.b;
    }
    
    int main()
    {
        A aa;
        cout << aa.a << endl;
        cout << aa.fun() << endl;//私有静态变量可以通过公有静态函数访问 5
        cout<<f(aa)<<endl;//私有静态变量可以可以通过友元函数间接访问 6
        A bb;
        bb.a++;
        cout << aa.a << endl;//输出11 表明全局静态成员是对象共享的 7
    
        aa.ff(); //输出10
        bb.ff(); //输出11 表明函数内的静态成员函数也是对象共享的 8
        return 0;
    }
  • 相关阅读:
    KMP算法
    快速排序的三种分区方法
    广义表
    外部排序(败者树、置换-选择排序、最佳归并树)
    内部排序
    散列表
    B树和B+树
    查找(顺序、折半、分块)
    关键路径
    拓扑排序
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/9350681.html
Copyright © 2020-2023  润新知