非静态函数,非静态变量与静态函数,静态变量

非静态函数,非静态变量与静态函数,静态变量

ID:38476304

大小:31.50 KB

页数:5页

时间:2019-06-13

非静态函数,非静态变量与静态函数,静态变量_第1页
非静态函数,非静态变量与静态函数,静态变量_第2页
非静态函数,非静态变量与静态函数,静态变量_第3页
非静态函数,非静态变量与静态函数,静态变量_第4页
非静态函数,非静态变量与静态函数,静态变量_第5页
资源描述:

《非静态函数,非静态变量与静态函数,静态变量》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、非静态函数,非静态变量与静态函数,静态变量一、函数函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调函数中,被调函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。引入内联函数和宏函数正是为了解决这个问题,提高程序的

2、运行效率。  在程序编译时,编译器将程序中出现的内联函数(宏函数)的调用表达式用内联函数(宏函数)的函数体来进行替换。由于在编译时将函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。在类静态数据成员不同于非静态的数据成员,一个类的静态数据成员仅创建和初始化一次,且在程序开始执行的时候创建,然后被该类的所有对象共享;而非静态的数据成员则随着对象的创建而多次创建和初始化;static成员是放在静

3、态存储区的,它并不受访问控制符的限制,而其它的成员变量则是放在栈中的。二、使用方面1:windows的回调函数使用静态函数:在类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的,这一点对于windows的回调机制非常有用。因为对于回调函数而言,windows不会借助任何对象去调用它,也就不会传递this指针,那么对于一般成员函数作为回调函数的后果,就是堆栈中有一个随机的变量会成为this指针,这当然会引发程序的崩溃。而static函数,由于是整个类的,屏蔽了this指针。因此

4、,如果成员函数作为回调函数,就应该用static去修饰它。2:线程控制函数常使用静态函数静态函数有特定的地址空间,这样可以避免在运行时system对内存调整带来的问题。3:Windows系统API,也常使用静态函数调用方面,不用在调用前实例化。三、实例代码#include"stdafx.h"#include#include#includeclassDirectory{public://静态公有的函数Directory(){strcpy(

5、strTemp,"/测试");i=15;}staticvoidsetpath(charconst*newpath);staticvoidsetname(Directory*dir);voidgetpath(char*oldpath);charstrTemp[50];inti;private://静态字符串staticcharpath[];};//静态数据成员的初始化charDirectory::path[199]="/开始测试";//静态函数访问静态变量voidDirectory::setpat

6、h(charconst*newpath){printf("path=%s",path);strncpy(path,newpath,199);printf("path=%s",path);}//静态函数访问非静态变量voidDirectory::setname(Directory*dir){dir->getpath("/静态函数访问非静态函数");dir->strTemp;//静态函数访问非静态变量return;}//非静态函数访问静态变量voidDirectory::getpath(ch

7、ar*oldpath){strncpy(Directory::path,oldpath,199);printf("Directory::path=%s",Directory::path);}//使用实例voidmain(){//通过类名调用setpath()成员函数//Directory::setpath("/通过类名调用静态成员函数");//通过对象调用setpath()成员函数Directorydir;dir.setpath("/静态函数访问静态变量");dir.getpath("/非静

8、态函数访问静态变量");Directory*dira;dir.setname(dira);}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。