C++类中的静态成员变量与静态成员函数的使用

代码:

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4
 5 using namespace std;
 6
 7 class A{
 8     public:
 9         static int a;
10         //static int a = 0; //编译不通过,无法在类内初始化
11         int b;
12         static void func1(){
13             cout<<"static func"<<endl;
14             a++;
15             //b++;
16         }
17         void func2(){
18             cout<<"normal func"<<endl;
19             a++;
20             b++;
21         }
22 }c;
23 int A::a = 0; //编译通过可以在类外初始化
24
25 int main(int argc,char* argv[]){
26
27     c.func1();
28     c.func2();
29
30     return 0;
31 }

输出:

static func
normal func

分析:

1、静态成员变量不能在类中初始化,需要在类外初始化。

2、静态成员函数只能访问静态成员变量,普通成员函数则没有这个限制。

3、静态成员函数不能为虚函数。

时间: 2024-10-12 21:34:26

C++类中的静态成员变量与静态成员函数的使用的相关文章

C++类中的静态成员变量与静态成员函数

最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下. 静态成员的概念: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员先于类的声明而存在于内存,也可以根据类声明的对象来访问.而非静态成员必须实例化之后才会分配内存. 非静态成员的概念: 所有没有加static的成员都是非静态成员.而类被实例化后,可以通过实例化的类

C++ 类中的静态成员变量,静态成员函数

//类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 静态成员函数是属于整个类, static修饰的变量,是属于类,,所有的对象都能共享用. 在类的静态数据成员函数中,是不能调用具体的对象的变量的属性, 这是因为static修饰的变量是整个类共享,在静态成员函数中使用一个对象的成员属性 c++编译器无法知道这个成员属性是哪个对象的 所以在静态成员函数中只能使用静

c++中静态成员变量和静态成员函数(笔试经历)

笔试经历 1 类中的静态变量不能通过构造函数参数列表来初始化,因为静态变量不属于哪个对象.同时静态变量在不初始化的情况下系统会自动为变量赋值,数值型赋值为零,字符型赋值为空. 非静态变量只有在定义时才会被分配内存,因此使用未声明的或者声明了未定义的变量程序都会运行失败.未声明时编译时失败,未定义是运行时失败. 2 静态成员数中的普通变量无论c还是java都是普通变量,需要定义后使用. 在c++中静态成员函数的访问方式为: 类名::函数名(): java中静态成员函数的访问方式:类名.函数名():

类静态成员变量和静态成员函数的访问方式

1.在类所有实例中静态成员变量和静态成员函数都只有一份拷贝 2.静态成员函数不能调用非静态成员,非静态成员函数可以调用静态成员 3.静态成员变量在使用前要初始化 一.静态成员变量的访问 class B { public: static int a; }; int B::a=0;//必须要先初始化 int main(){ cout<<B::a<<endl; return 0; } 二.静态成员函数的访问 class B { public: static void a(){ print

C++学习10 static静态成员变量和静态成员函数

一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局变量来达到共享数据的目的.例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,全局变量的值就被修改,导致程序的失败.因此在实际开发中很少使用全局变量. 如果想在同类的多

C++之类的静态成员变量和静态成员函数

static静态成员函数 在类中.static 除了声明静态成员变量,还能够声明静态成员函数. 普通成员函数能够訪问全部成员变量.而静态成员函数仅仅能訪问静态成员变量. 我们知道.当调用一个对象的成员函数(非静态成员函数)时,系统会把当前对象的起始地址赋给 this 指针.而静态成员函数并不属于某一对象.它与不论什么对象都无关,因此静态成员函数没有 this 指针.既然它没有指向某一对象,就无法对该对象中的非静态成员进行訪问. 能够说.静态成员函数与非静态成员函数的根本差别是:非静态成员函数有

static作用,静态成员变量和静态成员函数

static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接. 随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长. 在类的内部使用static是在全程序中控制名字的另一种方法.这些名字不会与全局名冲突,并且可见性和访问也限制在程序内部,使得在维护代码时有更多的控制. 数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静

C++静态成员变量和静态成员函数使用总结

       C++静态成员变量和静态成员函数使用总结: 一.静态成员变量: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态数据成员还具有以下特点: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中. 其定义方式与全局变量相同.举例如下: xxx.h文件 class base{ pr

学习IOS开问题篇--类中的成员变量如果不实例化是什么情况

@interface Person : NSObject @property (noatonmic,copy) NSString * name; @end 一个person类,name是person得成员变量 如果在一个类中写入person为成员变量 self.person.name = @"zhangsan"; 如果前面不将person实例化,实际上是在对一个空指针进行操作 [nil setname:@"zhangsan"]; 因为oc中对空指针发消息不会报错,所

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么

不能向编译后得到的类中增加实例变量!能向运行时创建的类中添加实例变量! 因为编译后的类已经注册在runtime中,类结构体中的objc_ivar_list 实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime 会调用class_setIvarLayout 或 class_setWeakIvarLayout来处理strong weak引用,所以不能向存在的类中添加实例变量. 运行时创建的类是可以添加实例变量,调用 class_addIvar 函数,但是得在调用