• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

开个会,看看多少人的看法和我是一样的。

CYQ_96 2001-07-23 12:11:27
大家第一感觉下面这段程序的输出结果是什么?
#include "iostream.h"
class a
{
public:
void print();
};
void a::print()
{
static int i=0;
cout << i++ << endl;
}
void main()
{
a a1,a2;
a1.print();
a1.print();
a2.print();
a2.print();
}
...全文
127 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
neomeng 2001-07-23
呵呵,看看。
回复
windindance 2001-07-23
静态变量的意思就是全局只有一个拷贝。
你所要求的应该是私有(private)变量。
回复
lase 2001-07-23
to CYQ_96 有同感,难道是C++编译器的优化措施? 希望高手解答!
回复
CYQ_96 2001-07-23
更正上“在print方法作用掝处不可访问”应为“在print方法作用掝外不可访问”
--- ---
回复
CYQ_96 2001-07-23
为何不是:0 1 0 1呢?
假如我要实现:a类的每个实例的print方法都需要一个静态变量,之所以使用静态变量的目的是使其在print方法作用掝处不可访问,而且每次访问完print方法后,该变量值保留(不仅仅是计执行次数)便于下一次调print方法时使用(多么典型的使用静态变量的原因啊!)。这个功能岂不是无法实现?
如用类普通变量代替print方法中的静态变量达到这个功能的话,不能满足“在print方法作用掝处不可访问”这个条件。
回复
dennis_duan 2001-07-23
of course.
函数体内的static变量经常用来控制函数被执行的次数,当然是只有一份拷贝了。
回复
ahzhuo 2001-07-23
统一,VC6测试也通过,说明static的局部变量跟其成员函数一样,是只有一份拷贝的。
回复
herlik 2001-07-23
0
1
2
3
应该是这个~!
回复
windindance 2001-07-23
用BCB5测试通过:)
回复
windindance 2001-07-23
0
1
2
3
回复
CYQ_96 2001-07-23
第一种改法:print中的局部变量i与类的成员i重名,在print子函数内“i”标号表示局部变量而不是类的成员"i"。输出当然是0。
第二种改法:不知如何解释。
第三种改法:太简单了,函数中的局部变量当然是不保留值的。
回复
qancy_chen 2001-07-23
如果我改成
#include "iostream.h"
class a
{
private:
int i;
public:
void print();
};
void a::print()
{
int i=0;
cout << i++ << endl;
}
void main()
{
a a1,a2;
a1.print();
a1.print();
a2.print();
a2.print();
}

#include "iostream.h"
class a
{
static i;
public:
void print();
};
void a::print()
{
static int i=0;
cout << i++ << endl;
}
void main()
{
a a1,a2;
a1.print();
a1.print();
a2.print();
a2.print();
}

#include "iostream.h"
class a
{
public:
void print();
};
void a::print()
{
int i=0;
cout << i++ << endl;
}
void main()
{
a a1,a2;
a1.print();
a1.print();
a2.print();
a2.print();
}
其输出都是0;(vc6)
这又是为什么?
回复
hitwd2000 2001-07-23
应该是
0
1
2
3
回复
CYQ_96 2001-07-23
好象把“类中成员函数中的静态变量”和“类的静态成员”混为一谈了吧?
回复
jerry2 2001-07-23
static变量存储在一个全局静态区域,所以说它的作用域是全局的,而不像普通的变量,在函数调用结束也就自动销毁的,换句话说,静态成员只有一份,是属于类的,而不是属于每个对象。
回复
CYQ_96 2001-07-23
有兴趣的朋友请往http://www.csdn.net/expert/topic/200/200628.shtm一游,有个更难的问题喔!
回复
n6002 2001-07-23
用模板会产生什么样的结果?
回复
CYQ_96 2001-07-23
To windindance(风之舞)
类的所有成员函数都有权访问私有(private)变量,无法满足“在print方法作用掝外不可访问”条件。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-23 12:11
社区公告

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