函数前面加上static 有什么作用呢?

xiaorou00 2003-04-22 09:31:54
函数前面加上static 有什么作用呢?

在一般函数前面加上static 和类中的成员函数中加上static 管什么用?
...全文
764 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartukyo 2003-04-22
  • 打赏
  • 举报
回复
一般成员函数的参数表中隐含了一个this指针,如 pObj->memberFxn(...);的实际调用是这样的:
memberFxn(pObj,...),所以在它内部使用的是调用对象的数据.
静态成员函数没有隐含的this指针,基调用方式跟一般的全局函数是一样的.所以,它无法隐式地取某个对象的成员数据,因此,在它内部只能出现类的静态成员变量.

采用静态成员函数的理由很简单:有些时候我们没有必要非要针对该类的某个对象进行操作.例如static CWnd::FromHandle(HWND hWnd),函数所要知道的仅一个hWnd即可,再给它一个this毫无意义,所以就用static
ndy_w 2003-04-22
  • 打赏
  • 举报
回复
不好意思,在a.cpp中不该写static
hawkxjy 2003-04-22
  • 打赏
  • 举报
回复
在类中用STATIC定义一个静态函数后,这个函数就直接从属于这个类,即使不建立对象也存在.当在函数内部定义了一个静态变量时,这个变量相当于全局变量,不把这个全局变量定义在函数体外的原因在于C++的封装性以及这样容易产生副作用;对于静态函数也是这个道理!
xiaorou00 2003-04-22
  • 打赏
  • 举报
回复
to : ndy_w(carpe diem)

error C2724: 'test' : 'static' should not be used on member functions defined at file scope
ruihuahan 2003-04-22
  • 打赏
  • 举报
回复
static修饰的作用定义被修饰的对象的作用域和可见性:作用域是全举的而可见性是局部的。
xiaorou00 2003-04-22
  • 打赏
  • 举报
回复
“成员函数是属于类的,而非对象的,也就是所有该类的对象共同拥有这一个成员函数,而不是普通的每个对象各自拥有一个成员函数”

有什么用途好处呢?
deng_lp 2003-04-22
  • 打赏
  • 举报
回复
g
ndy_w 2003-04-22
  • 打赏
  • 举报
回复
a.h
class A
{
public:
static void test()
};

a.cpp
#include "a.h"
static void A::test()
{
printf("test\n");
}

b.cpp
#include "a.h"
void main()
{
A::test(); //没有建立一个A对象,但是可以调用A类的静态成员。
}
xiaorou00 2003-04-22
  • 打赏
  • 举报
回复
能不能给一个能详细说明的例子?
ndy_w 2003-04-22
  • 打赏
  • 举报
回复
一般静态函数只能在当前c/cpp中被调用,作用域是当前源文件。类似于dll中没有export的。
静态成员函数正如linux2001所言。
lifeequation 2003-04-22
  • 打赏
  • 举报
回复
补充一下:加了static的成员变量,它是一个类属性,可以在对象还没有创建的时候
就可以对他初始化,他是有该类的所有对象公共来维护,不是属于每一个对象的
他的内存分配在heap中的,而非在stack中的
Linux2001 2003-04-22
  • 打赏
  • 举报
回复
在类成员函数中加上Static关键字代表这个成员函数是属于类的,而非对象的,也就是所有该类的对象共同拥有这一个成员函数,而不是普通的每个对象各自拥有一个成员函数
lblyy76 2003-04-22
  • 打赏
  • 举报
回复
有时需要为类定义一个从属于类的特性。该特性独立于具体的类的对象而存在。例如队列,可以用一个全局变量来记录队列对象的个数。但是队列记数是属于队列类的一个特性,如果设为全局变量则封装性不好,无法进行信息隐蔽。但也不能将该记数作为类的成员变量,因为并不是每个类的对象都独立拥有这一特性。静态函数只能访问静态成员变量、静态成员函数和类以外的函数和数据。不能访问类中的非静态成员变量。参考自《软件工程》
xiaorou00 2003-04-22
  • 打赏
  • 举报
回复
“相当于全局函数或全局变量。”怎么理解??
greenhope 2003-04-22
  • 打赏
  • 举报
回复
相当于全局函数或全局变量。
isdong 2003-04-22
  • 打赏
  • 举报
回复
http://www.sjtvu.com/WEBPAGE/c++/C5_2.ppt

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧