关于c++类静态成员分析
来源:互联网 发布:mysql 修改系统参数 编辑:程序博客网 时间:2024/05/16 05:51
c++类静态成员特点:
1、在类中申明,在类外别处定义
2、该类所有实例,都共享类外定义存储单元
3、类实例不会为它分配空间去引用类外定义的存储单元
4、在访问类静态成员时,是采用指令指针在偏移方式实现的
如下源码含有静态成员a,
#include <iostream>
using namespace std;class shared
{
static int a;
int b;
public:
void set(int i, int j)
{
a=i;
b=j;
}
void show();
} ;
int shared::a; // define a
void shared::show()
{
cout << "This is static a: " << a;
cout << "\nThis is non-static b: " << b;
cout << "\n";
}
int main()
{
shared x, y;
x.set(1, 1); // set a to 1
x.show();
y.set(2, 2); // change a to 2
y.show();
x.show(); /* Here, a has been changed for both x and y because a is shared by both objects. */
return 0;
}
(gdb) p sizeof(shared)
$5 = 4
(gdb)
(gdb)
(gdb)
(gdb)
(gdb) p &shared::a
$6 = (int *) 0x601174 <shared::a>
(gdb)
(gdb)
(gdb)
(gdb)
(gdb) disassemble /m shared::set
Dump of assembler code for function shared::set(int, int):
11 void set(int i, int j)
0x00000000004008f2 <+0>: push rbp
0x00000000004008f3 <+1>: mov rbp,rsp
0x00000000004008f6 <+4>: mov QWORD PTR [rbp-0x8],rdi
0x00000000004008fa <+8>: mov DWORD PTR [rbp-0xc],esi
0x00000000004008fd <+11>: mov DWORD PTR [rbp-0x10],edx
12 {
13 a=i;
0x0000000000400900 <+14>: mov eax,DWORD PTR [rbp-0xc]
0x0000000000400903 <+17>: mov DWORD PTR[rip+0x20086b],eax # 0x601174<_ZN6shared1aE>
14 b=j;
0x0000000000400909 <+23>: mov rax,QWORD PTR [rbp-0x8]
0x000000000040090d <+27>: mov edx,DWORD PTR [rbp-0x10]
0x0000000000400910 <+30>: mov DWORD PTR [rax],edx
15 }
0x0000000000400912 <+32>: pop rbp
0x0000000000400913 <+33>: ret
End of assembler dump.
0 0
- 关于c++类静态成员分析
- [c++]关于类的静态成员
- 关于类的静态成员
- C++---类中的静态成员
- C++:静态类成员函数
- 【C++】类的静态成员
- 关于编译器对c++ 类静态成员、静态成员函数、非静态成员函数的处理
- 关于C++类的静态成员函数
- 关于模板类中静态成员
- 关于类的静态成员初始化
- 关于类的静态成员变量
- 关于静态成员
- 关于静态成员函数
- 关于静态成员和静态成员函数
- C++:类的静态类成员
- 类静态成员static(C++)
- c++primer 12.6 静态类成员
- 类静态成员static(C++)
- (OK) [solved] error - compile cm-13-kiwi - shared-glapi/glapi_mapi_tmp.h: No such file or directory
- linux笔记-操作系统基础
- JavaScript基本类型和引用类型 — 第4.1讲
- Linux文件系统(1)-creat,open
- virtualbox中centos添加硬盘方式
- 关于c++类静态成员分析
- 文章标题
- 抽象的概念,对象的概念,面向对象和面向过程的区别
- Codeforces Round #246 (Div. 2)-D. Prefixes and Suffixes(KMP+DP)
- 二叉树的建立(顺序存储)
- C++学习日记
- Android温习之路:Day10java基础10
- WebUploader上传图片按钮打开很卡
- linux笔记-操作系统及常用命令