| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2447 人关注过本帖
标题:这个程序怎么修改才能正确运行?
只看楼主 加入收藏
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
结帖率:41.18%
收藏
已结贴  问题点数:5 回复次数:4 
这个程序怎么修改才能正确运行?
程序代码:
#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的值
求教怎么做,试了几种方法一直出现编译错误.真的没什么分了,对不住大家.
2016-01-16 15:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:2 
change 和 display 函数后加 const
num 和 score 前加 mutable

收到的鲜花
  • 家力掠2016-01-16 19:58 送鲜花  1朵   附言:感谢你的回答.
2016-01-16 18:58
NewClass
Rank: 2
等 级:论坛游民
帖 子:4
专家分:29
注 册:2016-1-16
收藏
得分:2 
好麻烦啊!
不修改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;
}
收到的鲜花
  • 家力掠2016-01-16 19:57 送鲜花  4朵   附言:感谢你的回答,非常详细.
2016-01-16 19:22
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
收藏
得分:0 
回复 2楼 rjsp
不好意思.没看三楼回复.感谢回答.
2016-01-16 19:54
hongcheng_g
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2016-1-10
收藏
得分:2 
// 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;
}
2016-01-17 10:39
快速回复:这个程序怎么修改才能正确运行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018269 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved