`
javasee
  • 浏览: 924119 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用汇编的眼光看C++(之类静态变量、静态函数)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


看过设计模式的朋友都知道,我们在设计单件模式的时候离不开类的静态函数。和类的成员变量不同,类的静态变量属于全部类对象数据;同样和类的成员函数不同,类的静态函数属于全部类函数共有。这句话读来想来有一些拗口,不过没有关系,我们可以通过一段代码来说明问题。

(1)静态变量

老规矩,我们首先对类进行初步定义,如下所示:

那么,这里出现的value是不是所共有的,我们可以看看相关的函数代码即可:

我们直接看74行和75行。我们看到复制的对象地址都是惊人的一致,这说明实际上m和n所指的value实际上是同一个地址0x401005。不过,类的静态对象有一个要求,那就是对象的静态变量必须像全局变量一样进行初始化操作。

(2)静态函数

静态函数和静态变量一样,实际上就是类的全局函数。它之所以和普通的成员函数不一样,就是因为它不需要定义类的类型就能使用这个函数。根据上面的信息,我们可以重新定义一下这个类:

那么类的静态函数是这样使用的呢?大家看看下面这样一个函数:

静态函数不需要对应的类对象,所以也就不需要this指针。这就是成员函数和静态函数的区别,仅此而已。



【预告: 下面一篇博客介绍类的算术重载符】



分享到:
评论

相关推荐

    浅析C++类的底层实现

    如果你不了解C++类的实现机制,不知道底层如何调用构造函数,静态变量,虚函数的底层等等关于C++类的底层实现,请一定要阅读本文档,因为他会让你豁然开朗。

    Visual C++开发经验技巧宝典(第1章)

    0018 静态变量的定义及应用 7 0019 使用全局变量的注意事项 7 0020 如何使用全局对象 7 0021 变量作用范围 8 0022 创建自己的变量类型 8 0023 如何声明同样类型的多个变量 8 0024 extern关键字的使用 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    7.9.2 类的静态函数成员 338 7.10 类对象的指针和引用 338 7.10.1 类对象的指针 338 7.10.2 类对象的引用 341 7.11 C++/CLI编程 343 7.11.1 定义数值类类型 344 7.11.2 定义引用类类型 348 7.11.3 ...

    C++复习资料之系列

    用C++语言编制的源程序要变为目标程序必须要经过( d )。 (a) 解释 (b) 汇编 (c) 编辑 (d) 编译 3.C++程序基本单位是( c )。 (a) 数据 (b) 字符 (c) 函数 (d) 语句 4. C++程序中的语句必须以( b )结束。 ...

    Visual C++开发经验技巧宝典(第3章)

    0167 运行时库和静态库与DLL的比较 78 0168 快速删除项目下Debug 文件夹中临时文件 78 0169 Visual C++文件扩展名介绍 78 0170 Visual C++快捷键 79 3.4 程序调试 82 0171 在发行版本中调试程序 82 0172...

    Visual C++音频视频处理技术及工程实践(分卷7)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    Visual C++音频/视频处理技术及工程实践 (分卷1)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    Visual C++音频视频处理技术及工程实践(分卷0)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    Visual C++音频视频处理技术及工程实践地址

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 ...

    McGraw C++程序调试实用手册

    2.2.14 函数调用之间允许使用别名 2.2.15 全局优化 2.2.16 产生内部函数的内联 2.2.17 优化math.h 2.3 Microsoft C++的优化开关 2.4 使用 Microsoft Visual Studio设置编译器选项 2.4.1 Project ...

    Visual C++音频/视频处理技术及工程实践(分卷2)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    NiceBASICV 1.0中文编程正式版【MSI安装版】

    可以使用由标准C语言和汇编ASM编写的静态库(LIB)作为函数功能扩展。可以调用WIN32API的大部分函数,已经在内部定义(.bi文件相当于C语言的.h)声明,直接引用即可,就像C++的WINDOWS开发包(SDK)。 NB的编译器是...

    NiceBASIC V1.0中文编程正式版(绿色版).rar

    可以使用由标准C语言和汇编ASM编写的静态库(LIB)作为函数功能扩展。可以调用WIN32API的大部分函数,已经在内部定义(.bi文件相当于C语言的.h)声明,直接引用即可,就像C++的WINDOWS开发包(SDK)。 NB的编译器是...

    Visual C++音频视频处理技术及工程实践(含源码2/2)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 ...

    OllyICE,od

    这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮: OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是...

    Visual C++音频视频处理技术及工程实践(分卷9)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    Visual C++音频视频处理技术及工程实践(分卷6)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    Visual C++ 音频/视频 处理技术及工程实践(分卷3)

    2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 ...

    The Art of Assembly Language

    英文版 以下是我从网上所的相关介绍 内容简介 本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言...15.4 使用C/C++和HLA编程 15.5 更多信息 附录A ASCII字符集 附录B 80x86指令集

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    6.2.2 低效的静态变量 140 6.2.3 数据的组织 141 6.2.4 消除除法 142 6.2.5 避免过大的循环 144 6.3 汇编和C/C++的混合编程 146 6.3.1 使用外置的汇编编译器 146 6.3.2 使用内嵌汇编 148 6.3.3 C++的函数调用规则 ...

Global site tag (gtag.js) - Google Analytics