C++ static静态成员

简介: C++ static静态成员

基本概念


静态成员:在定义前面加了 static 关键词的成员。


以下面的代码例子,来学习 static 关键词:1.jpg输出结果:

2

4


01 静态成员变量


普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。


这里需要注意的是 sizeof 运算符不会计算静态成员变量的大小,如下栗子:

class CTest
{
    int n;
    static int s;
};


则 sizeof(CTest) 等于 4


02 静态成员函数


普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。


因此静态成员变量静态成员函数不需要通过对象就能访问,因为他是共享的。


访问静态成员的方式 


01 类名::成员名

A::PrintNum();


02 对象名.成员名

A a;
a.PrintNum();


03 指针->成员名

A *p = new A();
p->PrintNum();


04 引用.成员名

A a;
A & ref = a;
ref.PrintNum();


小结


1. 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在;


2. 静态成员函数本质上是全局函数;


3. 设置静态成员这种机制的目的是将和某些紧密相关的全局变量和函数写在类里面,看上去像是一个整体,易于维护和理解;


4. 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数;


5. 静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。

相关文章
|
存储 编译器 C语言
详解C/C++中的static和extern
本文详解了C/C++中`static`和`extern`关键字的用法和区别,通过具体代码示例说明了在不同情境下如何正确使用这两个关键字,以及`extern "C"`在C++中用于兼容C语言库的特殊作用。
425 4
详解C/C++中的static和extern
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
233 2
|
7月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
363 6
|
11月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
269 5
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
261 10
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
146 3
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
240 3
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
C/C++静态链接pthread库的坑【-static -pthread】
C/C++静态链接pthread库的坑【-static -pthread】