首页 > 编程语言 >C++之静态变量和全局变量的区别

C++之静态变量和全局变量的区别

时间:2024-04-07 23:33:28浏览次数:23  
标签:变量 静态 作用域 成员 C++ Person 全局变量

全局变量和静态变量的存储方式是一样的,只是作用域不同。

静态局部变量具有局部作用域只对定义自己的函数可见,只被初始化一次,自从初始化一次之后直到程序运行期间一直都在。

静态全局变量具有全局作用域作用于定义它的程序文件但是不能作用于项目里的其它文件,这一点和全局变量不同。静态全局变量可以被多次初始化。

静态变量的作用域是当前源文件,全局变量的作用域是整个可执行程序

静态成员是在成员变量和成员函数前加上关键字static,称为静态成员,静态成员分为:

一、.静态成员变量
1.所有对象共享同一份数据
2.可用类名访问
3.类内声明,类外初始化
二、静态成员函数
1.所有对象共享同一个函数
2.静态成员函数只能访问静态成员变量

 class Person
{
public:
	static int m_A; //静态成员变量
	//静态成员变量特点:
	//1 在编译阶段分配内存
	//2 类内声明,类外初始化
	//3 所有对象共享同一份数据
private:
	static int m_B; //静态成员变量也是有访问权限的
};
int Person::m_A = 10;
int Person::m_B = 10;
void test01()
{
	//静态成员变量两种访问方式
	//1、通过对象
	Person p1;
	p1.m_A = 100;
	cout << "p1.m_A = " << p1.m_A << endl;
	Person p2;
	p2.m_A = 200;
	cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据
	cout << "p2.m_A = " << p2.m_A << endl;
	//2、通过类名
	cout << "m_A = " << Person::m_A << endl;
	//cout << "m_B = " << Person::m_B << endl; //私有权限访问不到
}
int main() {
	test01();
	system("pause");
	return 0;
}
class Person
{

public:
	//静态成员函数特点:
	//1 程序共享一个函数
	//2 静态成员函数只能访问静态成员变量
	static void func()
	{
		cout << "func调用" << endl;
		m_A = 100;
		//m_B = 100; //错误,不可以访问非静态成员变量
	}
	static int m_A; //静态成员变量
	int m_B; // 
private:
	//静态成员函数也是有访问权限的
	static void func2()
	{
		cout << "func2调用" << endl;
	}
};
int Person::m_A = 10;
void test01()
{
	//静态成员变量两种访问方式

	//1、通过对象
	Person p1;
	p1.func();
	//2、通过类名
	Person::func();
	//Person::func2(); //私有权限访问不到
}
int main() {
	test01();
	system("pause");
	return 0;
}

标签:变量,静态,作用域,成员,C++,Person,全局变量
From: https://blog.csdn.net/wszswllnzn_/article/details/137482251

相关文章

  • C++学习笔记九--模版
    目录前言1.函数模版1.函数模版的概念和定义2.函数模版的实例化2.类模版1.类模版的概念和定义2.类模版的实例化3.示例代码前言        这篇文章介绍下C++中的模版,包括函数模版和类模版。1.函数模版    在编程的过程中,编写函数都会考虑将其写......
  • C++智能指针学习——小谈引用计数
    目录前言控制块简介共享控制块引用计数与弱引用计数创建过程__shared_ptr__shared_count_Sp_counted_base弱引用计数增加过程再谈共享控制块__weak_count引用计数增加过程弱引用计数的减少过程弱引用计数减为0引用计数的减少过程引用计数减为0参考文章前言本文结合源码讨论std::......
  • 恶意代码之静态分析【第四辑】
    防病毒系列22年很想学习的恶意代码分析,今天又翻到了这本书,还是被书中的第一个故事所吸引…一个公司反复被黑客攻击后,作为安全工程师的你只能告诉老板说要聘请外部安全专家来解决这个问题,这很难保住饭碗,如果有足够的智慧可以马上学习《恶意代码分析实战》,让你可以轻松应对......
  • C++基础——函数
    C++语言函数基础:(这部分基础内容也是C语言的基础函数内容)函数是用函数名来调用执行的具有特定功能的语句块。为降低编写大程序的复杂度,必须将其分解为较小、较简单的模块。函数和类是构造C++程序的基本模块。函数分为:函数声明、函数定义、函数调用函数声明声明函数,这通常......
  • C++笔记打卡第五天(指针、结构体)
    1.指针inta=10;//指针定义的语法:数据类型*指针变量名int*p;p=&a;//也可以直接定义为:int*p=&acout<<&a<<endl;cout<<p<<endl;//可以通过解引用的方式来找到指针指向的内存(可以修改a的值)*p=1000;cout<<*p<<endl;cout<<a<&......
  • C++笔记打卡第六天(通讯录管理系统)
    1.结构体案例1每名老师带领5个学生,总共有3个老师。设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值。最终打印出老师数据以及老师所带学生数据。#......
  • C++ Break、Continue 和 数组操作详解
    C++Break和Continuebreak语句还可以用来跳出循环。在以下示例中,当i等于4时跳出循环:for(inti=0;i<10;i++){if(i==4){break;}cout<<i<<"\n";}C++Continue以下示例跳过了值为4的情况:for(inti=0;i<10;i++){if(i==4)......
  • C++中的类与对象丶this指针和构造函数与析构函数 (一)
    C++中的类与对象和this指针(一)一丶类与对象1.类的引入2.类的实例化3.类的类型的大小I.计算类或对象的大小II.规定空类占一个字节大小4.类中的访问权限5.类中的构造函数和析构函数I.构造函数II.析构函数二丶this指针1.this指针的引出2.this指针的特性3.th......
  • 上海计算机学会2020年5月月赛C++丙组T2计算GPA
    题目背景GPA是GradePointAverage的简写,是高校采用的一种评估学生成绩的制度。题目描述要计算一个学生的GPA,先将每门学科的等第换算成为一个绩点,规则为:等第 A 为 44 分;等第 B 为 33 分;等第 C 为 22 分;等第 D 为 11 分;如果有 + 号后缀,则加 0.30.3 ......
  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......