非静态函数,非静态变量与静态函数,静态变量.doc_第1页
非静态函数,非静态变量与静态函数,静态变量.doc_第2页
非静态函数,非静态变量与静态函数,静态变量.doc_第3页
非静态函数,非静态变量与静态函数,静态变量.doc_第4页
非静态函数,非静态变量与静态函数,静态变量.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

非静态函数,非静态变量与静态函数,静态变量一、函数函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调函数中,被调函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。引入内联函数和宏函数正是为了解决这个问题,提高程序的运行效率。在程序编译时,编译器将程序中出现的内联函数(宏函数)的调用表达式用内联函数(宏函数)的函数体来进行替换。由于在编译时将函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。在类静态数据成员不同于非静态的数据成员,一个类的静态数据成员仅创建和初始化一次,且在程序开始执行的时候创建,然后被该类的所有对象共享;而非静态的数据成员则随着对象的创建而多次创建和初始化; static成员是放在静态存储区的,它并不受访问控制符的限制,而其它的成员变量则是放在栈中的。二、使用方面1:windows的回调函数使用静态函数:在类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的,这一点对于windows的回调机制非常有用。因为对于回调函数而言,windows不会借助任何对象去调用它,也就不会传递this指针,那么对于一般成员函数作为回调函数的后果,就是堆栈中有一个随机的变量会成为this指针,这当然会引发程序的崩溃。而static函数,由于是整个类的,屏蔽了this指针。因此,如果成员函数作为回调函数,就应该用static去修饰它。2:线程控制函数常使用静态函数静态函数有特定的地址空间,这样可以避免在运行时system对内存调整带来的问题。3:Windows系统API,也常使用静态函数 调用方面,不用在调用前实例化。三、实例代码#include stdafx.h#include #include #include class Directorypublic:/ 静态公有的函数Directory()strcpy(strTemp,/测试);i=15;static void setpath(char const *newpath);static void setname( Directory *dir);void getpath(char *oldpath);char strTemp 50;int i;private:/静态字符串static char path ;/静态数据成员的初始化char Directory:path 199 = /开始测试;/ 静态函数访问静态变量void Directory:setpath(char const *newpath)printf(path=%sn,path);strncpy(path, newpath, 199);printf(path=%sn,path); /静态函数访问非静态变量void Directory:setname(Directory *dir)dir-getpath(/静态函数访问非静态函数); dir-strTemp;/静态函数访问非静态变量return;/ 非静态函数访问静态变量void Directory:getpath(char *oldpath) strncpy(Directory:path,oldpath, 199);printf(Directory:path=%sn,Directory:path); / 使用实例void main()/ 通过类名调用setpath()成员函数 /Directory:setpath(/通过类名调用静态成员函数);/通过对象调用setpath()成员函数Directory di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论