📄 实验1.txt
字号:
课程名《面向对象程序设计》
班级:计0611、0612、0613
实验1 “类的定义与对象的使用”
一、目的:掌握类的定义、对象的新建和引用,以及类的声明和成员函数定义的分离,掌握类中方法的重载。
二、实验内容:
1、编写并调试习题8-6,填写调试的过程和最终结果,尤其是过程中错误出现的原因以及如何将其改正的。
2、根据以下头文件,编写GradeManager类的实现部分GradeManager.cpp。
//GradeManager.h
class GradeManager
{ char name[20]; //学生姓名
float chinese; //语文成绩
float math; //数学成绩
public:
float average(void); //计算平均成绩
float sum(void); //计算总分
void show(void); //打印信息
void setName(char *); //为对象置姓名
char* getName(void); //取得学生姓名
void setChinese(float);//为语文成绩赋值
float getChinese();//获得语文成绩
void setMath(float);
float getMath();
};
实现后,根据下面给出的main.cpp调试程序。
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
cout<<"average:"<<gm.average()<<endl;
cout<<"sum:"<<gm.sum()<<endl;
}
int main(){
testgrade();
return 0;
}
调试成功后,将GradeManager.cpp和屏幕结果一起写在实验报告中。
3、在完成第2题的基础上,使用以下几种main.cpp文件运行程序,有什么问题,如何改正?
3.1
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm;
char c[100];
float x,y;
cin>>c>>x>>y;
strcpy(gm.chinese,c);
gm.math=x;
gm.chinese=y;
gm.show();
cout<<"average:"<<gm.average()<<endl;
cout<<"sum:"<<gm.sum()<<endl;
}
int main(){
testgrade();
return 0;
}
3.2
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
char c[100];
float x,y;
cin>>c>>x>>y;
GradeManager.setName(c);
GradeManager.setMath(x);
GradeManager.setChinese(y);
GradeManager.show();
cout<<"average:"<<GradeManager.average()<<endl;
cout<<"sum:"<<GradeManager.sum()<<endl;
}
int main(){
testgrade();
return 0;
}
3.3
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm;
char c[100];
float x,y;
cin>>c>>x>>y;
setName(c);
setMath(x);
setChinese(y);
show();
cout<<"average:"<<average()<<endl;
cout<<"sum:"<<setsum()<<endl;
}
int main(){
testgrade();
return 0;
}
3.4
//main.cpp
#include <iostream>
using namespace std;
}
void testgrade(){
GradeManager gm;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
cout<<"average:"<<gm.average()<<endl;
cout<<"sum:"<<gm.sum()<<endl;
}
int main(){
testgrade();
return 0;
}
4、在2题的基础上,使用以下几种main.cpp文件运行程序,有什么结果,这些结果说明什么问题(比较赋值、引用、指针的同异)?
4.1
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm,gm2;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
gm2=gm;
gm2.setMath(100);
gm2.show();
gm.show();
}
int main(){
testgrade();
return 0;
}
4.2
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm,&gm3=gm;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
gm3.setMath(1000);
gm3.show();
gm.show();
}
int main(){
testgrade();
return 0;
}
4.3
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm,*gm4=&gm;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
gm4.setMath(1000);
gm4.show();
gm.show();
}
int main(){
testgrade();
return 0;
}
4.4
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
GradeManager gm,*gm4=&gm;
char c[100];
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
(*gm4).setMath(1000);
gm4->show();
gm.show();
}
int main(){
testgrade();
return 0;
}
4.5
//main.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
}
void testgrade(){
/* GradeManager gm;
cout<<sizeof(gm)<<endl
float x,y;
cin>>c>>x>>y;
gm.setName(c);
gm.setMath(x);
gm.setChinese(y);
gm.show();
cout<<sizeof(gm)<<endl
}
int main(){
testgrade();
return 0;
}
5、根据第2题给出的GradeManager.h和main.cpp,分别调试以下不同的GradeManager.cpp,有什么错误,如何改正?
5.1
//GradeManager.cpp
#include <iostream>
using namespace std;
//计算平均成绩
float GradeManager::average(void){
return (chinese+math)/2;
}
//计算总分
float GradeManager::sum(void){
return chinese+math;
}
//打印信息
void GradeManager::show(void){
cout<<"name:"<<name<<","<<"chinese:"<<chinese<<","<<"math:"<<math<<endl;
}
//为对象置姓名
void GradeManager::setName(char *ns){
strcpy(name,ns);
}
//取得学生姓名
char* GradeManager::getName(void){
return name;
}
//为语文成绩赋值
void GradeManager::setChinese(float ch){
chinese=ch;
}
//获得语文成绩
float GradeManager::getChinese(){
return chinese;
}
//
void GradeManager::setMath(float m){
math=m;
}
//
float GradeManager::getMath(){
return math;
}
5.2
//GradeManager.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
//计算平均成绩
float average(void){
return (chinese+math)/2;
}
//计算总分
float sum(void){
return chinese+math;
}
//打印信息
void show(void){
cout<<"name:"<<name<<","<<"chinese:"<<chinese<<","<<"math:"<<math<<endl;
}
//为对象置姓名
void setName(char *ns){
strcpy(name,ns);
}
//取得学生姓名
char* getName(void){
return name;
}
//为语文成绩赋值
void setChinese(float ch){
chinese=ch;
}
//获得语文成绩
float getChinese(){
return chinese;
}
//
void setMath(float m){
math=m;
}
//
float getMath(){
return math;
}
5.3
//GradeManager.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
//计算平均成绩
float GradeManager::average(void){
return (chinese+math)/2;
}
//计算总分
float GradeManager::sum(void){
return chinese+math;
}
//打印信息
void GradeManager::show(void){
cout<<"name:"<<name<<","<<"chinese:"<<chinese<<","<<"math:"<<math<<endl;
}
//为对象置姓名
void GradeManager::setName(char *ns){
strcpy(name,ns);
}
//取得学生姓名
char* GradeManager::getName(void){
return name;
}
//为语文成绩赋值
void GradeManager::setChinese(float chinese){
chinese=chinese;
}
//获得语文成绩
float GradeManager::getChinese(){
return chinese;
}
//
void GradeManager::setMath(float math){
GradeManager::math=math;
}
//
float GradeManager::getMath(){
return math;
}
5.4
//GradeManager.cpp
#include <iostream>
using namespace std;
#include "GradeManager.h"
//计算平均成绩
float GradeManager::average(void){
return (chinese+math)/2;
}
//计算总分
float GradeManager::sum(void){
return chinese+math;
}
//打印信息
void GradeManager::show(void){
cout<<"name:"<<name<<","<<"chinese:"<<chinese<<","<<"math:"<<math<<endl;
}
//为对象置姓名
void GradeManager::setName(char *ns){
strcpy(name,ns);
}
//取得学生姓名
char* GradeManager::getName(void){
return name;
}
//为语文成绩赋值
float GradeManager::setChinese(float ch){
chinese=ch;
}
//获得语文成绩
void GradeManager::getChinese(){
return chinese;
}
//
float GradeManager::setMath(float math){
math=math;
}
//
void GradeManager::getMath(){
return math;
}
6、重载是指程序中包含多个函数名相同,但参数个数不同,或者参数类型不同,或者参数顺序不同的函数。按要求调试给出的Maxer.cpp文件。
//Maxer.cpp
class Maxer
{
public:
int getMax(){
return 100;
}
int getMax(int x,int y){
if(x>y)
return x;
else
return y;
}
int getMax(int x,float y){
if(x>y)
return x;
else
return (int)y;
}
int getMax(float x,int y){
if(x>y)
return (int)x;
else
return y;
}
};
int main(){
Maxer m;
m.getMax();
m.getMax(12,345);
m.getMax(12,34.456f);
m.getMax(12.0f,345);
m.getMax(12.0,345.5);
m.getMax(12.0f,345.5);
return 0;
}
6.1指出main函数中的getMax函数分别调用了Maxer类中getMax函数的哪个定义?
6.2现在在Maxer类中添加以下方法,编译时会出现什么提示,问什么?
float getMax(float x,int y){
if(x>y)
return (int)x;
else
return (int)y;
}
7、填写实验报告中的本次试验心得
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -