S
shmilyhqd
Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下代码:
#include <iostream.h>
class Student
{
Public:
static int noOfStudents;
Student&
nextstudent()
{
noOfStudents++;
return *this;
}
};
int Student::noOfStudents=0;
void fn(Student&
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&
nextstudent()
{
noOfStudents++;
return *this;
}
};
int Student::noOfStudents=0;
void fn(Student&
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这里特殊啊