在成员函数内定义static变量

成员函数内的局部变量可以是static的。如果将成员函数内的某个局部变量定义为静态变量,该类的所有对象在调用这个成员函数时将共享这个变量。

例3-40

 

本例在成员函数m中定义了一个static变量s,由于s定义在程序块内,它拥有程序块范围,因此它只能在m内部访问。每调用m一次,s就会相应地增加一次。又因为m是C的成员函数,所以,C的所有对象都共享这个静态局部变量。这样,对m的每一次调用访问的都是同一个s。相反,对于非静态局部变量x来说,每个C对象都拥有一个x。所以,在main中第一次调用c1.m()将s从0增加到1,调用c2.m()将s从1增加到2,第二次调用c2.m()将s从2增加到3。

另外:

这个变量在程序结束前一直存在,不会每次调用都重新生成,函数内静态变量是单例模式的一个很好的实现方式。

在成员函数内定义static变量

时间: 2024-10-05 23:56:20

在成员函数内定义static变量的相关文章

一个类成员函数的局部静态变量问题

之前工作中遇到一个问题,就像题目中描述的那样,看起来题目有些拗口复杂,这里解释下,当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的.无意义的.这个需求可以看做是在调用某成员函数时,第一次进行初始化,其他时候不进行操作,即在首次调用时进行初始化,根据这点,很容易想到c/c++里面的static变量,它的作用是保持变量内容的持久,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化.根据需求,使用static局部变量,写下

C++类内定义静态变量

C++类内定义静态变量只限定与integral类型,比如int.char.long.float.double都行,但是string不行 #include<iostream> #include<string> using namespace std; class testClass { public: static const int _dataI = 2; static const long _dataL = 389l; static const char _dataC = 'A'

C++基础知识(六)--类--成员函数的定义--对象的创建与使用--从面向过程到面向对象

一.类 1.类是一种数据类型,将数据与对数据的操作(函数)放到一起.一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口,对象之间通过消息进行通讯. 2.如果在类的起始点无访问说明符,系统默认为私有(private) 3.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员进行初始化.类中的任何数据成员也不能使用关键字extern,auto,register等关键字限定其存储类型 二.成员函数的定义 1.函数定义:通常在类定义中,成员函数仅做声明,函数

模板类成员函数的定义和声明为什么要放在一个文件中

"通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中.但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明.因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中.这就是为什么所有的STL头文件都包含模板定义的原因."[1] "标准要求编译器在实例化模板时必须在上下文中可以查看到其定义实体:而反过来,在看到实例化模板之前,编译器对模板的定义体是不处理的--原因很简单

php中函数内使用static修饰变量

首先理解静态变量的区别,声明一个函数test() function num(){ $a = 0; echo $a; $a++; } num();num();num(); //输出000 function num(){ static $a = 0; echo $a; $a++; } num();num();num(); //输出012 从上面可以看到使用static的区别,static可以在函数被重复调用的时候,static变量保留上次执行函数后的结果. 可以利用此类特性做隔行变色等 functi

4、 C++函数内的静态变量初始化以及线程安全问题

原文:https://www.cnblogs.com/zxjan/p/3538911.html 1. 如果是编译时和加载时初始化, 是不会存在线程安全这个issue的; 因为这两种初始化一定发生在Main函数执行之前, 这个时候尚未进入程序运行空间; 而这些初始化一定是在单线程环境下操作的!  --  都是在执行C Runtime的startup代码中的void mainCRTStartup(void)函数时所在的OS系统加载程序时的主线程空间上发生的! 2. 如果是运行时初始化, 因为无法保证

C++类的定义,成员函数的定义,对象的创建与使用

---恢复内容开始--- 类是一个模板,可用类生成一系列可用的实例.例如 int B就是生成了一个符合int的数据B,类也是一样,使用类名就可以直接生成一个实例, 该实例中包含类中所有的数据类型和对这些数据的操作方法. 首先,创建一个类 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: } 该类中包含三个部分,私有部分(private).保护部分(pro

c++ 函数内定义变量返回

测试代码: #include<bits/stdc++.h> using namespace std; char * fun() { char s[] = "abcde"; printf("fun:%p\n",s); return s; } char * fun1() { static char s[] = "abcde"; printf("fun1:%p\n",s); return s; } char * fun2

JavaScript中函数函数的定义与变量的声明&lt;基础知识一&gt;

1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new function("a","b","return a*b"); createFun(10,3); 2.JavaScript中变量的三种声明方式 a.var foo=value; b.window.foo=value; c.foo=value; //隐