C++ 静态成员 C++对象模型

1、静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。
静态成员分为:
静态成员变量
1)、所有对象共享同一份数据;
2)、在编译阶段分配内存;
3)、类内声明,类外初始化;
静态成员函数:
1)、所有对象共享同一个函数;
2)、静态成员函数值访问静态成员变量;

#include <iostream>
using namespace std;

/*静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量*/
class Person
{
    
    
public:
    static void func()
    {
    
    
        m_A = 100;//静态成员函数可以访问 静态成员变量
        //m_B = 200;//静态成员函数 不可以访问 非静态成员
        cout << "static void func调用" << endl;
    }
    static int m_A; //静态成员变量
    int m_B;         //非静态成员变量
};

int Person::m_A = 0;

void test01()
{
    
    
    //通过对象访问
    Person p;
    p.func();
    //通过类名访问
    Person::func();
}

int main()
{
    
    
    test01();
    system("pause");
}

2、成员变量和成员函数分开存储
在C++中,类内成员变量和成员函数分开存储;
只有非静态成员变量才属于类的对象上。

#include <iostream>
using namespace std;

//成员变量 和 成员函数 分开存储

class Person
{
    
    
    int m_A;//非静态成员变量

    static int m_B;//静态成员
};
int Person::m_B;//静态成员变量
void test01()
{
    
    
    Person p;
    //空对象占用内存空间为1
    //C++编译器会给每个空对象也分配一个字节空间,是为区分对象占内存的位置
    //每个空对象也应该有一个独一无二的内存地址
    cout << "size of p=" << sizeof(p) << endl;
    void func();//非静态成员函数
}

void test02()
{
    
    
    Person p;
    cout << "size of p=" << sizeof(p) << endl;
}

int main()
{
    
    
    test01();
    test02();
    system("pause");
}

Guess you like

Origin blog.csdn.net/weixin_42291376/article/details/121000240
C++