静态成员怎么使用呀

hailun 2005-10-02 08:58:43
#include<iostream.h>
#include<string.h>
class student
{
public:
student(char *pname="no name")
{
cout<<"create one student\n";
strcpy(name,pname);//地址?值?
noofstudents++;
cout<<noofstudents<<endl;
}
~student()
{
cout<<"destruct one student\n";
noofstudents--;
cout<<noofstudents<<endl;
}
static int number()//为什么没有static会出错呢?
{return noofstudents;}
protected:
static int noofstudents;//这个也是
char name[40];
};
int student::noofstudents=0;
void fn()
{
student s1;
student s2;
cout<<student::number()<<endl;
}
void main()
{
fn();
cout<<student::number()<<endl;
}
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy_msdn 2005-10-05
  • 打赏
  • 举报
回复
那strcat(char *s1, const char *s2);
又是对值进行操作还是对其地址进行的操作啊,
为什么?
Apollo_pl 2005-10-04
  • 打赏
  • 举报
回复
strcpy(name,pname);//地址?值?
是地址,意思是把指针pname是地址传给name ,地址覆盖的问题,
name和pname都是地址.
zyfire88 2005-10-04
  • 打赏
  • 举报
回复
static int number()//为什么没有static会出错呢?
__________________________
因为你的下面有cout<<student::number()<<endl;

static int noofstudents;//这个也是
____________________
因为你下面有int student::noofstudents=0;
luomingmao129 2005-10-04
  • 打赏
  • 举报
回复
在你的程序中因为有:int student::noofstudents=0;这句,这样,noofstudents变量就为整个类所共享,而不是属于某一个对象了。这正是静态变量的特征,而访问静态变量的成员函数一般为静态成员函数。因为一般的成员函数都有个指向某一对象的this指针,如果用这些函数去访问静态变量时,也会自动的加上一个this指针,这样错误就产生了,因为静态变量通过类名访问而不是类的某个对象访问。所以静态变量一般通过没有this指针的静态成员函数去访问。
好多公司笔试时都会问这个问题:静态成员函数和一般成员函数,静态成员变量和非静态成员变量的分别。前者主要是:静态成员函数没有指向某个对象的:this指针,后者是:静态成员变量为类所共享,一般通过(类名::静态成员变量)或静态成员函数来访问。

64,682

社区成员

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

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