深入理解C++中static与auto关键字的区别及其在类中的应用

static 是一个与 auto 相对的关键字。通常情况下,我们没有用 static 修饰的变量,其默认状态是 auto。因此,要理解 static 的话,首先需要看看 auto。

深入理解C++中static与auto关键字的区别及其在类中的应用

auto(automatic)的含义是变量的生存周期由程序自动控制。通常情况下,就是变量在进入其作用域时会被分配内存,而在离开其作用域时会被释放。

变量在程序初始化时会被分配,这种分配是由 static 来完成的,并且会一直保持到程序退出前才会被释放。

在C++中的用法:

1. 类的static数据成员

一般而言,一个类的数据成员需以一个实例(类的对象)作为承载。这意味着,针对每个对象,数据成员能够拥有不同的值。然而,对于 static 类型的数据成员而言,它无需以一个实例作为承载。简而言之:

类的静态成员属于类的范畴,并非对象的范畴。也就是说,所有的对象都会共同拥有一个 static 数据成员。

所以,这样访问static数据成员是一个好习惯:

class_name 的静态成员;(并非 object_name 的静态成员)

这样能够时刻使自己铭记,static 成员并非属于任何一个对象。并且,我们无需创建对象,就能够对其进行访问。

类声明的作用只是声明一个类的“尺寸和规格”,它并不会进行实际的内存分配。正因如此,在类声明内部是无法对 static 成员变量进行初始化的。

初始化的正确方法如下:若将类声明代码放置于 a.hpp 中,那么就应当在 a.cpp 内部(类定义的外部)进行初始化。其语法为:“type class_name::static_variable = value”,需注意这里没有关键字 static。

静态数据成员可以用来计算类对象的个数,

举个简单的例子:

//SingleDog.hpp
#include
class SingleDog{
public:
    SingleDog(int id_);
    static int getCount();
private:
    const int id;
    static int count;
};

//SingleDog.cpp
#include"SingleDog.hpp"
int SingleDog::count=0;//在此处初始化static成员变量
SingleDog::SingleDog(int id_):id(id_){//const类型变量的初始化方式
    count++;
}
int SingleDog::getCount(){
    return count;//
}

在 main 函数中,每创建一个 SingleDog 类的对象,count 就会在原先的基础上增加 1。因此,count 能够被用于计算对象的数量。

2. 类的static成员函数

static成员函数的访问与static数据成员类似;

需要注意的是,static 成员函数与对象没有关联。它不具备 this 指针。从这个意义上来说,它没办法访问类对象中的非静态成员。

(非static成员函数可以访问static成员)

知识量有限,请大佬指正。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

84阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

83阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

90阅读