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

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();
}
...全文
172 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
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方法作用掝外不可访问”条件。

16,548

社区成员

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

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

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