⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实验1.txt

📁 类的定义与对象的使用 C++学习中的基本知识点
💻 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 + -