C++ static静态成员
程序员文章站
2023-11-02 15:30:58
01 基本概念 静态成员:在定义前面加了static关键词的成员。 cpp A p = new A(); p PrintNum(); cpp A a; A & ref = a; ref.PrintNum(); 03 小结 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在。 ......
01 基本概念
静态成员:在定义前面加了static关键词的成员。
class a { public: a(int a, int b):m_a(a),m_b(b) { num += m_a + m_b; } ~a(){ } void fun(); // 普通成员函数 static void printnum() // 静态成员函数 { // 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数 std::cout << num << std::endl; } private: int m_a; // 普通成员变量 int m_b; // 普通成员变量 static int num; // 静态成员变量 }; // 静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。 int a::num = 0; int main() { a a1(1,1); a::printnum(); // 访问静态函数 a a2(1,1); a::printnum(); // 访问静态函数 return 0; }
输出结果
2 4
- 普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。
这里需要注意的是sizeof
运算符不会计算静态成员变量的大小,如下栗子:
class ctest { int n; static int s; };
则sizeof(ctest)
等于4
- 普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。
- 因此静态成员不需要通过对象就能访问,因为他是共享的。
02 如何访问静态成员
1) 类名::成员名
a::printnum();
2) 对象名.成员名
a a; a.printnum();
3) 指针->成员名
a *p = new a(); p->printnum();
4) 引用.成员名
a a; a & ref = a; ref.printnum();
03 小结
- 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在。
- 静态成员函数本质上是全局函数。
- 设置静态成员这种机制的目的是将和某些紧密相关的全局变量和函数写在类里面,看上去像是一个整体,易于维护和理解。
- 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数。
- 静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。
推荐阅读
-
C++ const常量对象、常量成员函数和常引用
-
C++ static静态成员
-
C++雾中风景11:厘清C++类型转换(static_cast,dynamic_cast,reinterpret_cast,const_cast)
-
php中static静态变量的使用方法详解
-
Java连载58-静态内部类、成员内部类详解
-
PHP static局部静态变量和全局静态变量总结
-
Can't debug c++ project because unable to static library start program *.lib
-
C++入门之new和delete关键字、静态成员属性与函数、this指针使用介绍
-
Linux下OpenVPN配置静态密钥(static-key)验证教程
-
PHP 5.0对象模型深度探索之类的静态成员