前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >static在C++中的一些用法

static在C++中的一些用法

作者头像
梦飞
发布于 2022-06-23 03:07:39
发布于 2022-06-23 03:07:39
73200
代码可运行
举报
文章被收录于专栏:csdn文章同步csdn文章同步
运行总次数:0
代码可运行

static是与auto相对的一个关键字,我们平时没有用static修饰的变量,都是默认为auto的。所以要理解static,就先看看auto。

auto(automatic)的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配内存,离开其作用域的时候被释放; 而static是变量在程序初始化时被分配,直到程序退出前才被释放。

在C++中的用法:

1. 类的static数据成员

一般来说,一个类的数据成员需要一个实例(类的对象)做为载体,也就是说,对于每个对象,数据成员可以有不同的值。但对于static类型的数据成员来说,它不需要一个实例作为载体,简单地说:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
类的静态成员是类的组成部分,而不是对象的组成部分。(或者说所有对象共享一个static数据成员)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class_name::static_member;(而不是object_name.static_member)

这样可以时刻提醒自己static成员不属于任何一个对象,我们不需要建立对象就可以访问它。

注意:类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以不能在类声明内初始化static成员变量;

初始化正确方法:如果把类声明代码放在a.hpp中,则应在a.cpp里面(类定义的外部)初始化,语法为:“type class_name::static_variable = value”(注意没有关键字static)

静态数据成员可以用来计算类对象的个数, 举个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//SingleDog.hpp

#include<iostream>

class SingleDog{
public:
    SingleDog(int id_);
    static int getCount();
private:
    const int id;
    static int count;
};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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成员)


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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在C++中的用法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档