静态成员函数_C++知识点 24:类中静态成员

24.1 知识点 类中静态成员分为:静态成员变量、静态成员函数
---------------------------------------------------------------------------------------------------------------------------------
一、静态成员变量:
语法: static 成员变量
性质: 共享 ==> 属于全部成员 (一改全改)
用法: 1、通过对象访问
2、通过类名访问
注意: 1、静态成员变量在编译阶段就分配了内存 ===> 必须 !! 在类内声明,在类外初始化
2、静态成员也有访问权限限制(类外只可以访问 public;子类只可以访问 public 和 protected )
---------------------------------------------------------------------------------------------------------------------------------
二、静态成员函数
语法: static 成员函数
性质: 共享
用法: 1、通过对象访问
2、通过类名访问
注意: 1、函数在类外只涉及调用,因此也没有静态成员变量必须在类外初始化的问题
只需要在类内定义即可
2、 静态函数内如果包含成员变量, 那该成员变量只能是静态的!!

24.2 静态成员
#include
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
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;
}

fd7bbff76098b95aa49ff53d0ced4857.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值