C++ 静态数据成员

1.静态数据成员包括静态数据和静态函数成员,访问权限和普通成员一样;静态数据成员用于描述类的总体信息,必须在类的体外定义并初始化,union不允许定义静态数据成员(union数据成员共享存储空间,而静态成员各自独立分配存储单元);
2.静态数据成员脱离对象独立存在,存储单元不属于任何对象的一部分,在计算类或者对象的空间大小时不包括静态数据成员;
3.访问形式:
 - LIST::head;
 - a.LIST::head;
 - a.head;
4. 静态数据成员独立分配一个存储单元,逻辑上所有对象共享这一存储单元,所以对静态数据成员的任何操作都会共享这一存储单元的所有对象;
/*示例代码

本程序定义具有自动维护功能的链表,节点定义时自动加入到链表首部,在析构时将自动从链表删除;
*/
#include <iostream>

using namespace std;
class LIST{
    int value;
    LIST *next;
    static LIST *head;
    public:
    LIST(int value);
    ~LIST();
};
LIST *LIST::head = 0;//定义并初始化静态数据成员
LIST::LIST(int v)
{
    this->value = v;
    this->next = head;
    head = this;
}
LIST::~LIST()
{
    LIST *p = head;
    if(head == this) head = this->next;
    else{
        while( p->next != this) p =p->next;
        p->next = this->next;
    }
}
int main()
{
    LIST a(1);
    LIST b(2);
    LIST c(3);
    b.~LIST();//删除b节点

    system("pause");
    return 0;
}
5.为了避免生存期的矛盾,局部类不允许定义静态数据成员;
函数 main 的静态对象s在退出main仍然继续生存,其普通对象 a 退出main后会消芒,作为a s 的共享静态数据成员,d 要么随对象 a 生存,要么随对象 s消芒;出现矛盾;
void main()
{
    class T{
        int c;
        //static int d; 局部类不能定义静态数据成员
    };
    T a;
    static T s;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值