游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4915|回复: 10

关于(静态)成员函数疑问

[复制链接]

17

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2007-2-7 01:42:00 | 显示全部楼层 |阅读模式
   成员函数对于同一个类的所有对象而言是共有的对吧?
   那么是否意味着对class A的对象a1和a2而言,不能同时运行该类的同一成员函数cc?
   或者在函数cc中是否可以定义class A的局部对象a3,然后通过a3再调用cc?
   还有就是在winmain中如果通过class A的两个对象刻意同时调用class A的同一个成员函数cc是否会发生访问冲突?
   请各位不吝赐教!

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
发表于 2007-2-7 10:43:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

看不懂你说啥"刻意同时调用?"使用多线程?

0

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-2-7 10:55:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

说得不太清楚,看着有点费劲,有没有人来说说,我也听着。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-2-7 13:23:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

这个问题可以把c++退化到c来理解
一个c++的class
假设是
class A
{
  int a;
public:
  void Func(){ a = 1; }
};

变成c则成了
struct A
{
int a;
};

void A_Func(A* this)
{
  this->a = 1;
}

而静态函数,则代表该函数只是一个有关于class A的utility而已,所以它不存在有this指针

6

主题

47

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2007-2-7 13:23:00 | 显示全部楼层

Re: 关于(静态)成员函数疑问

(静态)成员函数
嗯,不分静态还是什么。成员函数代码都只有一份

6

主题

47

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2007-2-7 13:30:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

静态函数默认是__cdecl.
非静态是__thiscall
调用方式不同,
不同线程用的是不同的栈。系统会自己保存现场的

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-2-7 15:12:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

静态函数仅仅提供访问控制而已。实际上和C函数是相同的。如果你的函数是可重入的,就不会发生冲突。

0

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-2-7 15:47:00 | 显示全部楼层

Re: Re:关于(静态)成员函数疑问

zliming: Re:关于(静态)成员函数疑问

静态函数默认是__cdecl.
非静态是__thiscall
调用方式不同,
不同线程用的是不同的栈。系统会自己保存现场的


不同线程用的是不同的栈。系统会自己保存现场的?

这个有点疑问,如果是同一个进程中的线程,他们的堆栈是共用的吧,我想应该是普通的函数和普通的线程间的同步不太一样,但具体是怎么样的呢,切换线程时做了什么事情呢?

如果在多个线程中间的同时调用一个函数改变另外一个函数的入口地址,而且也没有加互斥锁的话,不知道会有什么结果?这点也有点迷惑。
[em24]

6

主题

47

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2007-2-7 17:51:00 | 显示全部楼层

Re:关于(静态)成员函数疑问

你说的堆栈不是一个东西,那个指程式的栈帧。BSP BEP两个寄存器指的地方。你说的存取其它东西,只是不是全局还是静态的。没用锁.
void fun()
{
void (*funp)();
funp = xxx;
}
不用同步。
void fun1()
{
static int a;
a = xxx;
}
这个多线程就...

1

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2007-2-8 12:09:00 | 显示全部楼层

Re: 关于(静态)成员函数疑问

   我觉得楼主的问题是如何调用类的静态成员函数.其实,静态成员函数跟静态成员变量是一样的,所有的类对象只有一个变量和函数副本.对于静态成员函数,根据我现有的知识,它只能使用静态成员变量,而且调用方式比较特殊: 类名::静态成员函数 ,而不是通过对象调用.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 16:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表