南京信息工程大学实验报告(四)
头文件,源文件一开始分不清,然后查了一下,发现一篇讲的挺好的,下面是链接
https://blog.csdn.net/SleepBoyer/article/details/54577848
第二题
原来的包含在选做一里面了,下面是选做一的代码
graph.cpp
#include "graph.h"
#include <iostream>
using namespace std;
// 带参数的构造函数的实现
Graph::Graph(char ch, int n): symbol(ch), size(n) {
}
// 成员函数draw()的实现
// 功能:绘制size行,显示字符为symbol的指定图形样式
// size和symbol是类Graph的私有成员数据
void Graph::draw() {
for (int i=1;i<size+1;i++){ //控制行数
for (int j=0;j<size-i;j++){ //输出每行符号前的空格
cout<<' ';
}
for (int k=0;k<2*i-1;k++){ //输出图案符号
cout<<symbol;
}
cout<<endl; //换至下一行
}
}
// 补足代码,实现「实验4.pdf」文档中展示的图形样式
void Graph::redraw()
{
while(1){
cin>>symbol>>size;
draw();
}
}
graph.h
#ifndef GRAPH_H
#define GRAPH_H
// 类Graph的声明
class Graph {
public:
Graph(char ch, int n); // 带有参数的构造函数
void draw(); // 绘制图形
void redraw();
private:
char symbol;
int size;
};
#endif
Main.cpp
#include <iostream>
#include "graph.h"
using namespace std;
int main() {
Graph graph1('*',5), graph2('$',7) ; // 定义Graph类对象graph1, graph2
graph1.draw(); // 通过对象graph1调用公共接口draw()在屏幕上绘制图形
graph2.draw(); // 通过对象graph2调用公共接口draw()在屏幕上绘制图形
graph1.redraw();
return 0;
}
draw的算法:一行一行输出,最外层循环控制行数,里面第一个循环输出空格(有规律),紧接着的循环输出指定符号个数(有规律),接着换行,一行就完成了,可以进行下一行。
关于第二道改变控制台前景颜色和背景颜色的,百度了一下,发现有两种,一种是利用graphics.h 但是这个好像要在专门的一个软件里面,另一种是Windows.h 虽然两种都没有弄明白orz
第三道选做改变位置,有一点想法,但是没试过,就是getchar()一个字符,然后去重新定义一下输出软,但是又个疑惑,如果一开始是上或者是左键,图案怎么移动?
第三题实话没有做出来,程序有问题,一直报错说我的载入模糊不清,但是我不知道怎么改了,希望有大神帮我看一下,谢谢惹~
fraction.cpp
# include <iostream>
# include "fraction.h"
using namespace std;
Fraction::Fraction(int t,int b):top(t),botton(b){
}
Fraction::Fraction(){ //函数的重载
top=0;
botton=1;
}
Fraction::Fraction(int t):top(t){ //函数的重载
botton=1;
}
Fraction::~Fraction()
{}
void Fraction::fenshu(){
cout<<top<<"/"<<botton;
}
void Fraction::add(Fraction &f){
cout<<top*f.botton+top*f.botton<<"/"<<botton*f.botton<<endl; //加法 //加法
}
void Fraction::minus(Fraction &f){
cout<<top*f.botton-f.top*botton<<"/"<<botton*f.botton<<endl; //减法
}
void Fraction::multiplication(Fraction &f){
cout<<top*f.top<<"/"<<botton*f.botton<<endl; //乘法
}
void Fraction::division(Fraction &f){
cout<<top*f.botton<<"/"<<botton*f.top<<endl; //除法
}
void Fraction::compare(Fraction &f){
int m=top,n=botton;
int p=f.top,q=f.botton;
double w=top/botton;
double j=f.top/f.botton;
if (w>j){
cout<<"b较大"<<endl;
}
if (w<j){
cout<<"b较小"<<endl;
}
else {
cout<<"一样大"<<endl;
}
}
void Fraction::refenshu(){ //分数输入输出
while(1){
cin>>top>>botton;
fenshu();
}
}
fraction.h
#ifndef FRACTION_H
#define FRACTION_H
class Fraction{
public:
Fraction(int t=0,int b=1);
Fraction();
Fraction(int t);
~Fraction();
Fraction(Fraction &f);
void fenshu();
void add(Fraction &f);
void minus(Fraction &f);
void multiplication(Fraction &f);
void division(Fraction &f);
void compare(Fraction &f);
void refenshu();
private:
int top;
int botton;
};
#endif
main.cpp
# include <iostream>
# include "fraction.h"
using namespace std;
int main(){
Fraction a;
Fraction b(3,4);
Fraction c(5);
b.add(c);
b.minus(c);
b.multiplication(c);
b.division(c);
b.compare(c);
b.refenshu();
return 0;
}
做这题的时候有很多很多的问题暴露出来:
1.复制构造函数的运用,我运用他的时候,并没有将它放入函数成员参数中,导致了报错。
2.实现函数的时候忘记将类放在前面,对类中函数与对象的输出还不够确定代码怎么敲,掌握的不好。
3.重载函数一开始忘了使用,运用的不熟。
4.还有就是一些题目中要求功能的函数如何编写的问题了,不知道如何编写使得满足要求。
最后还是要提醒一下自己再把第三四章内容重新看看,在这几次作业中都有很多这两章内容的细节需要注意。