室内装修工人培训学校,seo顾问服务公司站长,期货贵金属网站建设,百度seo wordpress插件9. 静态成员
① 静态成员就是在成员变量和成员函数前加上关键字static#xff0c;称为静态成员。
② 静态成员分为#xff1a; 1. 静态成员变量 --所有对象共享同一份数据 --在编译阶段分配内存 --类内声明#xff0c;类外初始化 2. 静态成员函数 --所有对象共享同一个函数…9. 静态成员
① 静态成员就是在成员变量和成员函数前加上关键字static称为静态成员。
② 静态成员分为
1. 静态成员变量 --所有对象共享同一份数据 --在编译阶段分配内存 --类内声明类外初始化 2. 静态成员函数 --所有对象共享同一个函数 --静态成员函数只能访问静态成员变量 ③ 调用静态成员函数有两种方法
1. 通过对象调用 2. 通过类名调用 9.1 静态成员变量
#includeiostream
using namespace std;//静态成员变量
class Person
{
public://1、所有对象都共享同一份数据//2、编译阶段就分配内存//3、类内声明类外初始化操作static int m_A;//静态成员变量也是有访问权限的
private:static int m_B;
};int Person::m_A 100;void test01()
{Person p;cout p.m_A endl;Person p2;p2.m_A 200;//100 ? 200共享同一份数据所以p.m_A为200cout p.m_A endl;
}void test02()
{//静态成员变量 不属于某个对象上所有对象都共享同一份数据//因此静态成员变量有两种访问方式//1、通过对象进行访问Person p;cout p.m_A endl;//2、通过类名进行访问cout Person::m_A endl;//cout Person::m_B endl; //报错私有作用域出了类是不可以访问的
}int main()
{test01();test02();system(pause);
}
运行结果
100200200200请按任意键继续. . .
9.2 静态成员函数
#include iostream
using namespace std;//静态成员函数
//所有对象共享同一个函数
//静态成员函数只能访问静态成员变量
class Person
{
public://静态成员函数static void func(){m_A 100; //静态成员函数可以访问静态成员变量这个数据是共享的只有一份所以不需要区分哪个对象的。 //m_B 200; //静态成员函数不可以访问非静态成员变量无法区分到底是哪个对象的m_B属性非静态成员变量属于特定的对象上面cout static void func调用 endl;}static int m_A; //静态成员变量int m_B; //非静态成员变量//静态成员函数也是有访问权限的
private:static void func2(){cout static void func2调用 endl;}
};int Person::m_A 0;//有两种访问方式
void test01()
{//1、通过对象访问Person p;p.func();//2、通过类名访问Person::func(); //静态成员函数所有对象共享同一个函数可以直接通过类名访问。//Person::func2(); //类外访问不到私有静态成员函数
}int main()
{test01();system(pause);return 0;}
运行结果
static void func调用static void func调用请按任意键继续. . .
9.3 成员变量和成员函数分开存储
① 在C中类内对的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上。
#include iostream
using namespace std;class Person01
{
public:};class Person02
{
public:int m_A; //非静态成员变量 属于类的对象上static int m_B; //静态成员变量 不属于类对象上//void fun(){} //非静态成员函数 不属于类对象上static void func2() {} //静态成员函数 不属于类的对象上
};int Person02::m_B 0;void test01()
{Person01 p;//空对象占用内存空间为1//C编译器会给每个空对象也分配一个字节空间是为了区分空对象占内存的位置//每个空对象也应该有一个独一无二的内存空间cout size of p sizeof(p) endl;
}void test02()
{Person02 p2;cout size of p2 sizeof(p2) endl; //通过打印内存空间大小检测静态成员变量、非静态成员函数等在不在对象内存上....
}int main()
{test01();test02(); system(pause);return 0;}
运行结果
size of p 1size of p2 4请按任意键继续. . .
链接https://www.zhihu.com/question/437657370/answer/1692846096