CPP知识点复习归纳-静态成员变量

静态类成员特点:

无论创建多少个对象,程序都只创建一个静态类变量的副本。也就是说,类的所有对象共享同一个静态成员。

静态成员变量其类型可以是当前类的类型,而其它普通成员变量是可不可以的,除非是指针。

#include <iostream>
using namespace std;
class Person
{
public:
    string name;
    static Person p1;
    // Person p2; //报错
    Person *ptr;
};
void test()
{
    Person p;
    cout << sizeof(Person) << endl;
}
int main()
{
    test();
    return 0;
}

 

类定义一个对象的时候,才真正给这个类分配内存空间,

分析1,只有

string name;

static Person p1;

真正占用内存空间就是string类型的name,还有一个就是已经确定大小的Person p1,因为p1在编译之前已经确定了大小,静态成员已经给他分配好内存空间。

定义Person p的时候,所占内存空间等于 string name所占空间 加上 Person p1所占的空间,

p1占多大空间呢?要看Person占多少空间,这里就是string name所占空间大小。

所以定义Person p,就可以确定她的大小,它的本身普通成员变量的大小,再加上一个不在类范围内的静态成员变量所占的内存空间。

Person p; name + p1 -->固定大小 + 固定大小

分析2,只有

string name;

Person p2;

等于 name所占空间加上p2所占空间,p2占多大空间?p2不是静态的,它并没有提前开辟出来内存空间,p2占多大要看Person占多大,Person占多大,又返回来name占的空间加上p2所占的空间,如此循环,

Person p:固定大小的name + 不确定大小的内存

所以会编译报错

分析3,只有

string name;

Person *ptr;

因为指针所占用的内存空间是固定的,

Person p :固定大小name + 固定大小指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值