长春网站建设v1,手机装修设计软件,建站用哪个模板好,温州注册网络公司哪家强文章目录 前言正文静态成员变量初始化操作如何理解共享一份数据访问权限 静态成员函数访问方式静态成员函数只能访问静态成员变量访问权限 前言
静态成员分为 1#xff09;静态成员变量
所有对象共享一份数据在编译阶段分配空间类内声明#xff0c;类外初始化 2#xff09… 文章目录 前言正文静态成员变量初始化操作如何理解共享一份数据访问权限 静态成员函数访问方式静态成员函数只能访问静态成员变量访问权限 前言
静态成员分为 1静态成员变量
所有对象共享一份数据在编译阶段分配空间类内声明类外初始化 2静态成员函数所有对象共享一个函数静态成员函数只能访问静态成员变量
正文
静态成员变量
初始化操作
静态变量要进行初始化操作不然使用的时候会报错 我们来看看下面的代码
#define CRT_SECURE_NO_WARNINGS
#includeiostream
using namespace std;class Person {
public:static int m_A;};void test()
{Person p;cout p.m_A endl;
}int main()
{test();
}上面的代码会报错因为调用 p.m_A 的时候由于它没有被赋初值所以会报错 那怎么解决这个问题呢 可以在类内初始化吗 答案是不可以 那究竟该如何初始化呢 我们要在类外初始化 这样就解决问题了
如何理解共享一份数据
看完下面这个代码和运行结果你就会了解了
#define CRT_SECURE_NO_WARNINGS
#includeiostream
using namespace std;// 静态成员分为
// 1静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明类外初始化
// 2静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person {
public:// 类内声明static int m_A ;};// 类外初始化操作
int Person::m_A 100;void test()
{Person p;cout p.m_A endl;// 再实例化一个对象Person B;cout B.m_A endl;B.m_A 200;cout p.m_A endl;cout B.m_A endl;
}int main()
{test();
}静态成员变量的访问方式有两种
#define CRT_SECURE_NO_WARNINGS
#includeiostream
using namespace std;// 静态成员分为
// 1静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明类外初始化
// 2静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person {
public:// 类内声明static int m_A ;};// 类外初始化操作
int Person::m_A 100;void test()
{Person p;cout p.m_A endl;// 再实例化一个对象Person B;cout B.m_A endl;B.m_A 200;cout p.m_A endl;cout B.m_A endl;
}void test02()
{// 静态成员变量 不属于某个对象上所有对象都共享同一份对象// 因此静态成员变量有两种访问方式// 1.通过对象进行访问Person p;cout p.m_A endl;// 2.通过类名进行访问cout Person::m_A endl;
}int main()
{//test();test02();
}访问权限
如果静态成员变量是在 private 属性的那么类外无法访问 在类外中 m_B 无法被访问
静态成员函数
访问方式
有两种访问方式
#define CRT_SECURE_NO_WARNINGS
#includeiostream
using namespace std;// 静态成员分为
// 1静态成员变量
// * 所有对象共享一份数据
// * 在编译阶段分配空间
// * 类内声明类外初始化
// 2静态成员函数
// * 所有对象共享一个函数
// * 静态成员函数只能访问静态成员变量class Person
{
public:// 静态成员函数static void fun(){cout static void fun 函数 调用 endl;}
};// 有两种访问方式
void test01()
{// 1.通过对象访问Person p;p.fun();// 2.通过类名访问Person::fun();
}int main()
{test01();
}静态成员函数只能访问静态成员变量
class Person
{
public:// 静态成员函数static void fun(){cout static void fun 函数 调用 endl;m_A 100; //(正确) 静态成员函数可以访问 静态成员函数m_B 100; // (错误) 静态成员函数不可以访问 非静态成员函数,无法区分是哪个实例的 m_B}static int m_A; //静态成员变量int m_B; // 非静态成员变量
};
int Person::m_A 10;访问权限
如果静态成员函数是 private 权限下的外部也不能访问