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");
}