前言:
今天朋友们对“静态成员变量的值可以修改吗”可能比较关怀,各位老铁们都想要知道一些“静态成员变量的值可以修改吗”的相关内容。那么小编也在网摘上网罗了一些对于“静态成员变量的值可以修改吗””的相关知识,希望你们能喜欢,看官们快快来学习一下吧!24.1 知识点
类中静态成员分为:静态成员变量、静态成员函数
---------------------------------------------------------------------------------------------------------------------------------
一、静态成员变量:
语法: static 成员变量
性质: 共享 ==> 属于全部成员 (一改全改)
用法: 1、通过对象访问
2、通过类名访问
注意: 1、静态成员变量在编译阶段就分配了内存 ===> 必须 !! 在类内声明,在类外初始化
2、静态成员也有访问权限限制(类外只可以访问 public;子类只可以访问 public 和 protected )
---------------------------------------------------------------------------------------------------------------------------------
二、静态成员函数
语法: static 成员函数
性质: 共享
用法: 1、通过对象访问
2、通过类名访问
注意: 1、函数在类外只涉及调用,因此也没有静态成员变量必须在类外初始化的问题
只需要在类内定义即可
2、 静态函数内如果包含成员变量, 那该成员变量只能是静态的!!
24.2 静态成员
#include<iostream>
using namespace std;
// 1、基本用法
class Person
{
public:
static int m_A; // 类内声明:成员变量前 + static
};
int Person::m_A = 10; // 编译阶段就分配内存,因此类外初始化 // 注意添加作用域
void test01()
{
// 访问方式一:通过对象访问
Person p1;
cout << p1.m_A << endl; // 结果: 10
//访问方式二:通过类名访问
cout << Person::m_A << endl; // 结果: 10
// 共享属性
Person p2;
cout << p2.m_A << endl; // 结果: 10
// 一改全改
p2.m_A = 20;
cout << p1.m_A << endl; // 结果: 20
cout << p2.m_A << endl; // 结果: 20
}
****************************************************************************************
// 注意 静态成员变量也是有访问权限的
class Person1
{
public:
static int m_A;
private:
static int m_B;
};
int Person1::m_A = 10;
int Person1::m_B = 20;
void test02()
{
cout << Person1::m_A << endl;
// cout << Person1::m_B << endl; //err:不可访问
}
****************************************************************************************
int main()
{
//test01();
test02();
}
24.3 静态成员函数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
// 1、基本用法
class Person
{
public:
static void func() // 成员函数前 + static
{
m_A = 100; // 包含的成员变量必须是静态的
}
static int m_A; // 静态成员变量声明
};
int Person::m_A = 10; // 静态成员变量初始化
void test01()
{
//调用方式一:通过对象调用
Person p;
p.func();
cout << p.m_A << endl; // 结果: 100 // 通过静态成员函数改变了静态成员变量的值
//调用方式二:通过类名调用
Person::func();
cout << p.m_A << endl; // 结果: 100
}
****************************************************************************************
//注意:静态函数内如果包含成员变量只能是静态的 !!
// 如果不是成员变量,则不要求它一定是静态的
class Person1
{
public:
static void func()
{
// m_A = 100; // err: m_A不是静态成员变量
int a = 10; // 如果不是成员变量,则不要求它一定是静态的
cout << "a = " << a << endl;
}
int m_A; // 非静态成员变量
};
//原因说明
void test02()
{
Person1 p1;
p1.m_A = 10; // m_A 是非静态的,不共享,在对象p1中,等于10
Person1 p2;
p2.m_A = 20; // 在对象p2中,等于20
// 使用类名访问:
Person1::func(); // 结果: a = 10 // 如果不是成员变量,则不要求它一定是静态的
//静态函数中的变量是可以修改的,如果是成员变量,编译器根本不知道应该改p1中的值还是改p2中的值
// 如果你认为两个都改,那么这就是共享属性(静态属性)
// 因此:静态函数内如果包含成员变量只能是静态的 !!
// 本质原因:静态成员函数没有this指针 // 后面详细介绍
}
****************************************************************************************
int main()
{
//test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
标签: #静态成员变量的值可以修改吗 #静态成员变量的值可以修改吗为什么 #静态数据成员变量的值可以修改吗 #静态数据成员变量的值不可修改 #静态成员变量通过什么访问