使用VC6打开考生文件夹下的工程RevProj15。此工程包含一个源程序文件RevMain15.cpp,但该程序中类的定义有错误。请改正程序中的错误,使它能得到正确结果。 注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。 源程序文件RevMain15.cpp中的程序清单如下: //RevMain15.cpp #include<iostream> using namespace std; class Sample { private: int x; static int y; public: Sample(int a) {x=a;y+=x; } static void print(Sample s) {cout<<"x="<<x<<<<",y="<<y<<end1; } Sample::y=5; int main() {Sampel s1(10);Sample s2(15);Sample::print(s1);Sample::print(s2);return 0; }
参考答案:
解析:正确的类Sample的定义为: class Sample { private: int x; static int y; public: Sample(int a) { x=a; y+=x; } static void print(Sample s) { cout<<"x"<<s.x<<",y="<<s.y<<end1; } int Sample::y=5; 类Sample的定义中有两处错误。 ①在类Sample中定义了静态成员函数print()和静态数据成员y。静态成员函数可以直接对类的静态数据成员进行访问,但是不能对类中非静态成员进行直接访问。所以错误在于语句“cout<<"x="<<x<<",y="<<y<<end1;”,应该将其改为:“cout<<"x="<<s.x<<",y="<<s.y<<end1;”。 ②C++中,静态数据成员的初始化与一般数据成员不同。静态数据成员初始化的格式如下: <><>::<静态数据成员>=<值>; 所以语句“Sample::y=5,”缺少类型说明符int。应该改为:int Sample::y=5;