Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >类的静态成员变量

类的静态成员变量

原创
作者头像
村子里的设计师
发布于 2023-05-20 15:41:00
发布于 2023-05-20 15:41:00
1.2K00
代码可运行
举报
文章被收录于专栏:程序设计a程序设计a
运行总次数:0
代码可运行

类的静态成员要在类内声明,类外定义。这样做的原因参照 here

类外定义时又要注意哪些内容呢?

不在头文件中定义静态成员变量

这是“尽量不在头文件中定义变量”(参考)的延伸。

错误的代码示例

class.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef __CLASS_H
#define __CLASS_H

class A{
        static int var;
};

int A::var = 1;

#endif

main.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main() {
        return 0;
}

test1.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "class.h"

test2.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "class.h"

报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ g++ -o main test1.o test2.o main.o
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: test2.o:test2.cpp:(.data+0x0): multiple definition of `A::var'; test1.o:test1.cpp:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【IT领域新生必看】深入了解Java中的静态成员变量和实例成员变量:初学者的全方位指南
在Java编程中,变量是存储数据的基本单元。根据变量的定义位置和作用范围,Java中的变量可以分为静态成员变量和实例成员变量。理解这两种变量的区别和使用场景,是掌握Java编程的重要一步。本篇文章将详细介绍静态成员变量和实例成员变量的定义、用法及其区别,帮助你全面理解这些重要概念。
E绵绵
2024/07/12
2890
从零开始学C++之对象的使用(一):static 成员变量、static 成员函数、类/对象的大小
该文章介绍了static关键字在C++中的使用,主要包括static成员变量、static成员函数以及类/对象大小的计算。static成员变量是类的静态成员变量,可以通过类名直接访问,可以避免重复定义和静态链接库等问题。static成员函数是类的成员函数,可以在类外定义和实现,具有静态绑定和链接特点。类/对象大小的计算需要考虑类的成员变量和成员函数的存储空间,虚函数和虚继承等因素也会影响类的大小。
s1mba
2017/12/28
1.3K0
C++之静态成员变量和静态成员函数学习总结
平时我们在写类的时候,类中的成员变量,我们一般是通过对象名来访问public成员变量的,一般private(私有)的成员变量,对象是不能直接访问的;同时我们要明白每个对象的成员变量都是专属的,而且成员变量是不能在对象之间共享的,这就是专属性。下面我们来做一个小的程序需求来慢慢引出静态成员变量:
用户6280468
2022/03/21
6630
必须使用extern的场景
即使不使用extern,在头文件中定义的全局变量,也可以被引用了该头文件的外部源文件使用。那extern存在的意义是什么?它要解决什么问题?
村子里的设计师
2023/05/20
5530
面试中常见的 C 语言与 C++ 区别的问题
C和C++中都有关键字static关键字,那么static关键字在C和C++中的使用有什么区别?请简述之。
C语言与CPP编程
2020/10/22
9520
面试中常见的 C 语言与 C++ 区别的问题
适合具备 C 语言基础的 C++ 入门教程(九)
在上一则教程中,叙述了关于C++类型转换的相关内容,在本节教程中,将叙述 C++的另一个内容,也就是抽象,这也是 C++相对于 C语言来说独特的一点,下面我们就来着重叙述这一点。
wenzid
2021/02/24
4330
适合具备 C 语言基础的 C++ 入门教程(九)
C++面试高频考点:inline的深层理解与实战应用
您好,我是昊天,国内某头部音频公司的C++主程,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。
程序员的园
2025/04/10
1330
C++面试高频考点:inline的深层理解与实战应用
c++之静态成员
静态成员是指成员变量和成员函数前加上关键字static。 静态成员分为:静态成员变量、静态成员函数; 静态成员变量: 所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化 静态成员函数: 所有对象共享同一个函数 静态成员函数只能访问静态成员变量 #include<iostream> using namespace std; class Person{ public: //类内声明,静态成员变量也是有访问权限的 static int m_a; static void fun
西西嘛呦
2020/08/26
4100
“undefined reference to“ 问题汇总及解决方法 ——非常非常好的一篇文章
在实际编译代码的过程中,我们经常会遇到"undefined reference to"的问题,简单的可以轻易地解决,但有些却隐藏得很深,需要花费大量的时间去排查。工作中遇到了各色各样类似的问题,按照以下几种可能出现的状况去排查,可有利于理清头绪,从而迅速解决问题。
全栈程序员站长
2022/09/02
15.2K0
C++类的设计与实现规范
规范是一种规定,遵守这种规定能够带来长远的利益,而违反这种规定却不会立即收到惩罚。程序设计的规范是人们在长期的编程实践中总结出来的,深入理解这些规范需要认真的思考和大量的实践 。不符合程序设计规范的代码也能通过编译并运行,但是从长远来看,代码存在可读性差、安全性低、不易扩展、不易维护等问题。类是面向对象程序设计最主要的元素,遵循必要的规范,设计出性能优良的类,并以适当的方式实现,是编写出高质量程序的关键。
恋喵大鲤鱼
2019/02/22
1.3K0
C++:静态成员与友元
我们在开发中会发现,有一些属性是所有对象所共有的,比如:学生总人数,链表头指针,尾指针等,这些数据成员没有必要和对象进行关联,它们更需要被所有对象所共享,而不是在每个对象中都对其重复进行操作。如果将其放在全局变量中,那么 C++ 的封装性将受到影响,静态成员案例见以下程序片段
字节星球Henry
2021/08/09
7390
【C++】static关键字及其修饰的静态成员变量/函数详解
全局(静态)存储区:分为data段和bass段。data段(全局初始化区)存放初始化的全局变量和静态变量;bass段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中bass段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
修修修也
2024/04/01
3.2K0
【C++】static关键字及其修饰的静态成员变量/函数详解
C++类大小和静态成员/方法
类大小计算 空类的大小为1字节 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的 字节对齐的问题。与C语言一致 没有继承的时候,存在虚函数则需要加上虚指针vptr(+4个字节),如果有多个也只需要加上一个,因为只有一个虚指针。 虚基类指针:如果是虚继承,则子类的大小为:虚基类的大小 + 4个字节(用来存放指向虚基对象的指针)+子类新增成员的大小。 示例 #include <iostream> using namespace std; /** * 8=4(x)
用户2929716
2018/08/23
7810
小心两个共享库共用同一个静态库
小心两个共享库共用同一个静态库.pdf 注:以下内容仅针对Linux/GCC环境,不涵盖Windows,包括Cygwin环境。 下载测试代码:
一见
2018/08/07
2.8K0
小心两个共享库共用同一个静态库
【static】关键字静态成员:在类级别上共享数据和方法的机制
static成员独立于类对象存在,也就是说它不属于对象的成员,它能被全体对象所共享。 统计·类类型对象创建的个数,用static成员来实现。 非static成员属于类对象,每个对象都有一份拷贝。 static成员函数没有this指针,他不能访问非static成员,也不能调用非static成员函数。
洁洁
2023/12/05
3460
extern关键字详解
extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
WindSun
2019/08/29
1.8K0
static修饰的成员变量及函数
static成员变量又称为静态成员变量,在多个对象间共享使用,并且static静态变量在初始化时必须在类外初始化,可以直接通过“类名::变量”访问,哪怕是还没有生成对象时一样可以访问,以此看来static成员变量不隶属于某个对象,而隶属于类,只是所有该类的对象都可以使用而已。
我与梦想有个约会
2023/10/20
2160
static修饰的成员变量及函数
[Modern CPP]内联变量——保证变量唯一性的利器
在 C++ 中,一个定义了全局变量的头文件被多个源文件包含时,每个源文件都会创建该全局变量的一个实例,这可能导致链接时出现重定义错误,代码示例如下。
程序员的园
2024/07/18
1370
[Modern CPP]内联变量——保证变量唯一性的利器
C++类和对象(5)static修饰的静态成员变量&函数
我们自己定义一个类,使用这个类创建对象,我们应该如何判断在这个程序执行的过程中,创建了多少个对象,有几个对象是正在使用的。
阑梦清川
2025/02/24
2010
C++类和对象(5)static修饰的静态成员变量&函数
【C++】"undefined reference to" 问题常见的解决方法
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:
自学气象人
2023/01/11
4K0
推荐阅读
相关推荐
【IT领域新生必看】深入了解Java中的静态成员变量和实例成员变量:初学者的全方位指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验