静态数据成员的难点

code145 2008-03-07 06:10:21
#include<iostream.h>
class student{
static int count;
int student no;
pbulic:
{
count++;
studentno=count;
}
void print()
{
cout<<"student"<<studentno<<"";
cout<<"cout="<<cout<<endl;
}
};
int student::count=0;
main()
{
student student1;
student1.print();
cout<<" \n";
student student2;
student1.print();
student2.print();
cout<<" \n";

student student3;
student1.print();
student2.print();
student3.print();
cout<<" \n";
student student4;
student1.print();
student2.print();
student3.print();
student4.print();
return 0;
}
我的问题是为什么这个程序的结果是
student1 count=1

student1 count=2
student2 count=2

student1 count=3
student2 count=3
student3 count=3

student1 count=4
student2 count=4
student3 count=4
student4 count=4
为什么每个输出的COUNT都是一样的啊 ,程序中不是有“studentno=count”这句话吗?
我不理解,希望大家详细的解释下,谢谢,我是初学者
...全文
101 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mhtcc520 2008-03-08
  • 打赏
  • 举报
回复
静态成员变量全局只有一份拷备,你这个例子每构造一个对象就会修改他。这个几个对象使用的是同一count,所以到最后几个输出是一样的。
IT_lau 2008-03-08
  • 打赏
  • 举报
回复
count在不停的变啊,到第四步成4了都,,,,
就呆在云上 2008-03-08
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class student{
static int count;
int studentno;
public:

student ()
{
count++;
studentno=count;
}
void print()
{
cout <<"student" <<studentno
<<"count=" <<count <<endl;
}
~student() {}
};
int student::count=0;
int main()
{
student student1;
student1.print();
cout <<" \n";
student student2;
student1.print();
student2.print();
cout <<" \n";

student student3;
student1.print();
student2.print();
student3.print();
cout <<" \n";
student student4; //每次创建一个类,那么他的就自己调用一次构造函数,但
//是构造函数里面的studentno是用count初始化的,而
//你要知道,static成员对一个类的所有对象而言都是共有的
//所以你每次构造一个对象,那么count就++了一次,之前的student1
//的count和之后的count都公用
/*
至于你问为什么不是:
student4 count=4
student4 count=4
student4 count=4
student4 count=4
而是student1 count=4
student2 count=4
student3 count=4
student4 count=4
只能说明你的书读的害不够,student后面的1234是由studentno决定的,
这个东西不是static的,不是共有的,在对象构造之初就已经确定了的,同志!!
*/
student1.print();
student2.print();
student3.print();
student4.print(); //你在这里每次都是调用的
return 0;
}
就呆在云上 2008-03-08
  • 打赏
  • 举报
回复
#include <iostream.h> 
class student{
static int count;
int student no;
pbulic:
{
count++;
studentno=count;
}

这个是什么啊?
是类?
有这么定义的?
public都不对,你怎么得到你的结果啊?
我改一下再看看
code145 2008-03-08
  • 打赏
  • 举报
回复
当生成第四个对象的时候,count这个时候等于4,因为,studentno=count,所以这个时候的studentno也=4,所以在进行print函数进行调用的时候应该输出的都是
student4 count=4
student4 count=4
student4 count=4
student4 count=4 才对啊!
为什么是student1 count=4
student2 count=4
student3 count=4
student4 count=4
请继续,不好意思,谢谢一二楼的!
ttkk_2007 2008-03-07
  • 打赏
  • 举报
回复
每个count都一样和studentno=count有什么关系
静态变量只初始化一次,count是被所有student对象共享的,只要产生一个student对象,count就加一
不管你用student1还是studentn,他们的count都是一样的
hityct1 2008-03-07
  • 打赏
  • 举报
回复
因为,在构造函数里count++; ,你每次生成一个新对象都调用一次构造函数;不生成新对象count就不变。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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