实在不明白?有关静态数据成员问题 ( 积分: 20 )

  • 主题发起人 主题发起人 shmilyhqd
  • 开始时间 开始时间
S

shmilyhqd

Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下代码:
#include <iostream.h>
class Student
{
Public:
static int noOfStudents;
Student&amp;
nextstudent()
{
noOfStudents++;
return *this;
}
};
int Student::noOfStudents=0;
void fn(Student&amp;
s)
{
cout<<s.nextStuden().noOfStudents<<endl;
}
void main()
{
Student ss;
fn(ss);
}
运行结果:
实际结果:(调试环境VC++6.0 XP)
屏幕上输出 1

但我不明白的是 我看得教材上 特别强调了这样一段话
上面的代码用返回对象引用的成员函数作为对象值去操作静态成员,
但是静态成员只取返回对象的类型,其成员函数未被执行;
s.nextStudent()返回Student类对象的引用,该引用作为后面的点操作符左操作数
而右操作数是静态数据成员noOfStudent;
成员函数nextStudent()实际上未被调用执行,
引用静态成员时 C++系统只关心成员的类类型;
如果按照上面的话理解
应该得到的理论测试结果:
屏幕上输出 0

真得不明白了 不知道 是相信 实际结果 还是 理论结果 可能是不是vc这里特殊啊
 
请看如下代码:
#include <iostream.h>
class Student
{
Public:
static int noOfStudents;
Student&amp;
nextstudent()
{
noOfStudents++;
return *this;
}
};
int Student::noOfStudents=0;
void fn(Student&amp;
s)
{
cout<<s.nextStuden().noOfStudents<<endl;
}
void main()
{
Student ss;
fn(ss);
}
运行结果:
实际结果:(调试环境VC++6.0 XP)
屏幕上输出 1

但我不明白的是 我看得教材上 特别强调了这样一段话
上面的代码用返回对象引用的成员函数作为对象值去操作静态成员,
但是静态成员只取返回对象的类型,其成员函数未被执行;
s.nextStudent()返回Student类对象的引用,该引用作为后面的点操作符左操作数
而右操作数是静态数据成员noOfStudent;
成员函数nextStudent()实际上未被调用执行,
引用静态成员时 C++系统只关心成员的类类型;
如果按照上面的话理解
应该得到的理论测试结果:
屏幕上输出 0

真得不明白了 不知道 是相信 实际结果 还是 理论结果 可能是不是vc这里特殊啊
 
实际上它已经被调用了Static声明表示该类的所有对象都共享同一个变量地址。。。。
 
不弟刚刚学
VC
 
简单一点就是:在同一个实例(进程)里面,一个静态变量是固定在一个地址的,不管你实例化了多个类,这个变量都是指向同一个内存地址。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
663
import
I
后退
顶部