使用VC6打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请改正main函数中的错误。 源程序文件main2.cpp清单如下: //main2.cpp #include <iostream> using namespace std; class MyClass { public: MyClass(int m) {member=m; } ~MyClass() {} int GetMember() {return member; } private: int member; }; MyClass MakeObject(int m) { MyClass *pMyClass=new MyClass(m); return *pMyClass; } int main ( ) { int x=7; /************found**************/ MyClass *myObj=MakeObject(x); /*************found*************/ cout<<"My object has member"<<myObj.GetMember()<<end1; return 0; }
参考答案:
解析:修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout<<"My object has member"<<myObj->GetMember()<<end1; return 0; } 本题考核对象指针的应用。程序中出现了2个出错标识符,说明此程序有2处错误。 第1处错误:“MyClass *myObj=MakeObject(x);”。myObj是对象指针,而函数 MakeObject( )的返回值是类MyClass的对象,所以应改为:“MyClass *myObj=&MakeObject(x);”。 第2处错误:“cout<<"My Object has member"<<myObj.GetMember()<<end1;”。对象指针使用方式有两种:“对象指针名->成员名;”和“(*对象指针名)成员名;”。显然上述语句的对象指针的使用方式是错误的。应改为“cout<<"My object has member"<<myObj-> GetMember()<<end1;”, 或者“cout<<"My Object has member"<<(*myObj).GetMember()<<end1;”。