注册 登录
编程论坛 C++教室

这个程序怎么修改才能正确运行?

家力掠 发布于 2016-01-16 15:19, 2671 次点击
程序代码:
#include <iostream>
using namespace std;
class Student
{
   public:
      Student(int n,float s): num(n), score(s){}
      void change(int n,float s){num = n; score = s;}

      void display(int num, float score){cout<<num<<" "<<score<<endl;}
   private:
      int num;
      float score;
};

int main(void)
{
   const Student stud(101, 78.5);
   stud.display();
   stud.change(101, 80.5);
   stud.display();

   return 0;
}

 题目的要求是在不改变常对象的定义上修改程序,使之能正常运行,用change函数修改数据成员num和score的值
求教怎么做,试了几种方法一直出现编译错误.真的没什么分了,对不住大家.
4 回复
#2
rjsp2016-01-16 18:58
change 和 display 函数后加 const
num 和 score 前加 mutable

#3
NewClass2016-01-16 19:22
好麻烦啊!
不修改main函数内容,就只有修改类!
第一个错误是调用函数display和类里函数原型不匹配,函数原型里有参数,调用又没有参数,根据你类的定义,显然不需要参数,所以将类函数display修改为
void display(){cout<<num<<" "<<score<<endl;}
其次会出现error c2662错误,错误原因是const类型的对调用非const类型的方法导致的,需要在类函数原型和函数体后加const修饰,修改实例如下:
void display(int num, float score)const {cout<<num<<" "<<score<<endl;}
这样修改后仍然提示error c2166错误,这是因为类函数改变了非静态变量导致的,对你的类定义的private两个变量加mutable修饰,实例如下:
   private:
      mutable int num;
      mutable float score;
至此,在不改变main函数代码的情况下,对类定义做上述修改即可正常运行,修改后代码如下

程序代码:
#include <iostream>
using namespace std;
class Student
{
   public:
      Student(int n,float s): num(n), score(s){}
      void  change(int n,float s)const {num = n; score = s;}

      void  display() const{cout<<num<<" "<<score<<endl;}
   private:
      mutable int num;
      mutable float score;
};

int main(void)
{
   const Student stud(101, 78.5);
   stud.display();
   stud.change(101, 80.5);
   stud.display();
   return 0;
}
#4
家力掠2016-01-16 19:54
回复 2楼 rjsp
不好意思.没看三楼回复.感谢回答.
#5
hongcheng_g2016-01-17 10:39
// 1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include<conio.h>
using namespace std;
class Student
{
   public:
      Student(int n,float s): num(n), score(s){}
      void change(int n,float s){num = n; score = s;}

      void display(){cout<<num<<" "<<score<<endl;}
   private:
      int num;
      float score;
};

int main()
{
   Student stud(101, 78.5);
   stud.display();
   stud.change(101, 80.5);
   stud.display();
   getch();
   return 0;
}
1