龙空技术网

C++知识点 24:类中静态成员

Tina是个小妹妹 196

前言:

今天朋友们对“静态成员变量的值可以修改吗”可能比较关怀,各位老铁们都想要知道一些“静态成员变量的值可以修改吗”的相关内容。那么小编也在网摘上网罗了一些对于“静态成员变量的值可以修改吗””的相关知识,希望你们能喜欢,看官们快快来学习一下吧!

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;

}

标签: #静态成员变量的值可以修改吗 #静态成员变量的值可以修改吗为什么 #静态数据成员变量的值可以修改吗 #静态数据成员变量的值不可修改 #静态成员变量通过什么访问