008_linuxC++之_类的静态变量和静态函数

(一)看程序

 1 #include <iostream>
 2 #include <string.h>
 3 #include <unistd.h>
 4
 5 using namespace std;
 6
 7 class Person {
 8 private:
 9     static int cnt;        /*静态变量,在33行中初始化为0*/
10     char *name;
11
12 public:
13
14     static int getCount(void);     /*静态函数*/
15
16     Person() {    /*当运行一次结构体定义时候就会运行一次这个,具体看007构造函数*/
17         name = NULL;
18         cnt++;
19     }
20     ~Person()        /*释放时候自动运行,看007构造函数*/
21     {
22         cout << "~Person()"<<endl;
23     }
24
25 };
26
27 int Person::cnt = 0; /* 定义和初始化 */
28
29 int Person::getCount(void)
30 {
31     return cnt;
32 }
33
34
35 int main(int argc, char **argv)
36 {
37     Person p[100];
38     cout << "person number = "<<Person::getCount()<<endl;    /*静态变量输出100*/
39     cout << "person number = "<<p[0].getCount()<<endl;        /*静态变量输出100*/
40     cout << "person number = "<<p[1].getCount()<<endl;        /*静态变量输出100*/
41
42     return 0;
43 }

main.cpp

运行结果

(二)静态函数中不能调用非静态的变量

如,name的初始化在静态函数中使用会编译出错

编译结果

原文地址:https://www.cnblogs.com/luxiaoguogege/p/9690566.html

时间: 2024-10-16 08:34:49

008_linuxC++之_类的静态变量和静态函数的相关文章

Java中的静态变量和静态函数

Java中的静态变量和静态函数(方法)和C++中也类似.有几点需要重新复习一下: 1)如果想让一个类的所有对象共享数据,可以使用静态变量:如果想共享函数,可以使用静态函数. 2)如果某个对象修改了静态变量的值,那么该类的所有对象都会受到影响. 3)静态变量和静态函数在类创建对象之前就可以调用,这点和普通的变量函数很不一样. 4)常量可以声明为final static,所有对象都共享. 5)访问一个类的静态变量和静态函数,一般都使用"类名.静态变量"或者"类名.静态函数&quo

关于“在本类中访问本类私有静态变量”的一点疑惑解析

关于"在本类中访问本类私有静态变量"的一点疑惑解析 代码如下: public class StaticVar { private static int x = 100; public static void main(String[] args) { StaticVar var1 = new StaticVar(); var1.x++; StaticVar var2 = new StaticVar(); var2.x++; StaticVar.x++; System.out.print

c++ 类的静态变量

类的静态变量作为类的一部分,但不由类的创建产生,类的销毁而消失.静态变量和全局变量一样,会在main函数结束后销毁. 类可以对静态变量的值进行改变 #pragma once class ctest { public: ctest(void); ~ctest(void); static bool btest; }; 运用场景1: 类中有一个线程,但是类已经销毁了,而线程(while循环等)没有退出,这是可以通过静态变量来控制线程.

C++类中静态变量和普通变量的区别

静态变量: 1.静态变量会被编到程序的exe里面,从程序启动到结束,它一直存在: 2.静态变量的初始化值为0: 3.全局变量默认是静态变量: 4.在类中的函数变量前面加了static的也是静态变量,只不过被语言限定在只能在函数内部使用: 5.在有MFC对话框的程序了,如果一个变量和对话框绑定,那么该变量就不能声明为静态变量,函数也是一样的,因为声明为静态变量后不能随时接受对话框内的值,    主要是因为静态变量的值设置后是不能被修改的: 6.可以使用类名+静态成员名访问此静态成员,因为静态成员存

java 静态变量与静态函数

%带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 在调用带有静态方法的类中的静态方法的时候,直接用类名.方法名就可以了.例如,math.sin(); Java的静态变量和静态函数 静态变量: 在JAVA中类在声明的时候,其实并没有申请和产生内存空间,就如同我们的一个切实可行的想法,但其实并没有去实施这个想法.而类只有在用这种数据类型创建一个类的对象的时候,才能在内存中申请和产生类大小的内存空间,这一块内存空间是用来存放成员变量和成员函数的备份.所以在类声明的时候,是不可以对成员变量进行

PHP接口中的静态变量、常量与类中静态变量、常量的区别

接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不能使用parent::YOUCONST的方式调用接口的常量 类: 1 const 变量可以使用parent::YOUCONST的方式,className::YOUCONST的方式在子类中访问 2 const定义的变量,在子类中可以被覆盖 3 当然在类中可以定义静态成员变量了 示例: <?phpint

类的静态变量访问

<?php /** * @author keke * @copyright 2016 * 这是一个类的标准格式,用于记忆,静态变量访问:student::$fee */ class student { public static $fee = 0; public $name; function __construct($name) { $this->name = $name; //非静态属性访问格式:$this->name } public static function runCode

使用代理类解决静态变量的一个问题

目前业务有个需求,需要使用多线程同时去获取不同类型的数据.在获取数据时,需要做签名检验,签名校验的包由第三方提供 (我们无法修改),现在的问题是,线程启动后,第一个类型的数据可以被成功获取,但是后面类型的数据就会提示签名失败.但是单独拉后面类型的数据时,又可以成功,进过排查,发现是第三方包中的一个核心类其中有很多变量被设置为了static, 每个线程都会去设置这些static变量值,导致签名检验失败.以下是几种解决策略: 1. 将多线程换成单线程: 加锁,使得每次只有一个线程在真正执行. 由于第

java 类的静态变量

主要是记录一个奇葩的现象,java类中的静态变量,不仅可以通过类名称直接调用,而且还可以通过类的实力对象调用,java是不存在静态类的,如果非要用静态的类那就是内部类. 类中的静态变量是存储在JVM方法区中,线程共享的. public class HasStatic { public static int x = 100; public static void main(String args[]) { HasStatic hasStatic1 = new HasStatic(); hasSta