静态成员和静态函数

对于静态成员:
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;
}

 

转载于:https://www.cnblogs.com/ybf-yyj/p/9350681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值