C++ 实验3 类和对象

1.小球移动

#include <iostream>
#include "canvas.h"
#include "Ball.h"
int main() {
    Canvas canvas;
    
    Ball ball1(10,10);
    system("pause");
    
    ball1.left(5);
    system("pause");
    
    ball1.up(20);
    system("pause");

    canvas.changeCanvasFg("E");  // 更新画布前景色 
    system("pause");
    
    canvas.changeCanvasBg("D");  // 更新画布背景色 
    system("pause");

    return 0;
}
main.cpp
#ifndef CANVAS_H
#define CANVAS

#include <string>
using std::string;

class Canvas {
    public:
        Canvas(string bg0="0", string fg0="A");
        void changeCanvasBg(string bg0);
        void changeCanvasFg(string fg0);
        void changeCanvasColor(string bg0, string fg0); 
    private:
        string bg; // background color
        string fg; // foreground color 
};

#endif
canvas.h
#include "canvas.h"
#include <cstdlib>

Canvas::Canvas(string bg0, string fg0):bg(bg0), fg(fg0) {
    string color = "color ";
    color += bg0;
    color += fg0;
    system(color.c_str());
} 
void Canvas::changeCanvasBg(string bg0) {
    bg = bg0; // 更新画布背景色 
    
    string color = "color ";
    color += bg;
    color += fg;
    system(color.c_str());
    
}
void Canvas::changeCanvasFg(string fg0) {
    fg = fg0; // 更新画布前景色 
    
    string color = "color ";
    color += bg;
    color += fg;
    system(color.c_str());
    
}
void Canvas::changeCanvasColor(string bg0, string fg0){
    bg = bg0;  // 更新画布背景色
    fg = fg0;   // 更新画布前景色 
    
    string color = "color ";
    color += bg;
    color += fg;
    system(color.c_str());    
}
canvas.cpp
#ifndef BALL_H
#define BALL_H

class Ball {
    public:
        Ball(int x0=0, int y0=0);    // 在坐标(x,y)处构造一个小球(小球用字符O表示) 
        void left(int step=1);     // 左移step 
        void right(int step=1);   // 右移step 
        void up(int step=1);        // 上移step 
        void down(int step=1);   // 下移step 
        private:
        int x;     // x坐标
        int y;     // y坐标 
};

#endif
ball.h
#include "ball.h"
#include <iostream>
#include <cstdlib>  // 因为使用了system("cls"); 所以需要包含这个头文件 
using std::cout;
using std::endl;

const int SIZE_X=50;   // 小球x轴移动范围0~SIZE_X 
const int SIZE_Y=50;   // 小球y轴移动范围0~SIZE_Y

Ball::Ball(int x0, int y0):x(x0), y(y0) {
    // 打印y0-1行空行
    for(int line=1; line <= y0-1; line++)
        cout << endl;
    
    // 打印x0-1个空格
    for(int col=1; col <= x0-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl; 
    
}

void Ball::left(int step) {
    x = x-step;
    if(x <= 0)
        x=0;
    
    // 清屏 
    system("cls");
    
    // 打印y-1行空行
    for(int line=1; line <= y-1; line++)
        cout << endl;
    
    // 打印x-1个空格
    for(int col=1; col <= x-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl; 
    
}

void Ball::right(int step) {
    x = x+step;
    if(x >= SIZE_X)
        x=SIZE_X;
    
    // 清屏 
    system("cls");
    
    // 打印y-1行空行
    for(int line=1; line <= y-1; line++)
        cout << endl;
    
    // 打印x-1个空格
    for(int col=1; col <= x-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl; 
    
} 

void Ball::up(int step) {
    y = y-step;
    if(y <= 0)
        y=0;
    
    // 清屏 
    system("cls");
    
    // 打印y-1行空行
    for(int line=1; line <= y-1; line++)
        cout << endl;
    
    // 打印x-1个空格
    for(int col=1; col <= x-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl; 
    
}

void Ball::down(int step) {
    y = y+step;
    if(y >= SIZE_Y)
        y = SIZE_Y;
    
    // 清屏 
    system("cls");
    
    // 打印y-1行空行
    for(int line=1; line <= y-1; line++)
        cout << endl;
    
    // 打印x-1个空格
    for(int col=1; col <= x-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl;     
}
ball.cpp

2.定义Graph类对象,调用绘图接口绘制图形

#include <iostream>
#include "graph.h"
using namespace std;

int main() {
    Graph graph1('*',5);
    graph1.draw();
    
    system("pause");
    system("cls");
    
    Graph graph2('$',7);
    graph2.draw();

    system("pause");
    
    return 0; 
} 
main.cpp
#ifndef GRAPH_H
#define GRAPH_H
class Graph {
    public:
        Graph(char ch, int n);
        void draw();
    private:
        char symbol;
        int size;
};

#endif
graph.h
#include "graph.h" 
#include <iostream>
using namespace std;

// 带参数的构造函数的实现 
Graph::Graph(char ch, int n): symbol(ch), size(n) {
}


// 成员函数draw()的实现
// 功能:绘制size行,显示字符为symbol的指定图形样式 
void Graph::draw() {
    // 补足代码
    int i,j,k;
    for(i=0;i<size;i++)
    {for(j=0;j<size-1-i;j++)
        cout<<" ";
     for(k=0;k<2*i+1;k++)
         cout<<symbol;
     cout<<endl;
    }
}
graph.cpp

3.设计一个分数类Fraction描述分数(两个整数的比值)

#include"fraction.h"
#include<iostream>
using namespace std;
int main() {
    Fraction a;
    a.show();
    Fraction b(3, 4);
    b.show();
    Fraction c(5);
    c.show();
    int x, y;
    cin >> x >> y;
    Fraction d(x, y);
    d.show();
    a.fractionadd(b, d);
    a.fractionmin(b, d);
    a.fractionmul(b, d);
    a.fractiondiv(b, d);
    a.fractioncom(b, d);
    system("pause");
}
main.cpp
#ifndef FRACTION_H
#define FRACTION_H

class Fraction {
public:
    Fraction(int t = 0, int b = 1) : top(t), bottom(b) {
    }
    Fraction(const Fraction &fr) : top(fr.top), bottom(fr.bottom) {
    }
    void fractionadd(Fraction &f, Fraction &p);
    void fractionmin(Fraction &f, Fraction &p);
    void fractionmul(Fraction &f, Fraction &p);
    void fractiondiv(Fraction &f, Fraction &p);
    void fractioncom(Fraction &f, Fraction &p);
    void show();
private:
    int top;
    int bottom;
};
#endif // !FRACTION_H
fraction.h
#include"fraction.h"
#include<iostream>
using namespace std;
void Fraction::show() {
    if (top == 0) cout << 0 << endl;
    else if (bottom == 1) cout << top << endl;
    else if (top / bottom < 0) cout << "-" << top << "/" << bottom << endl;
    else cout << top << "/" << bottom << endl;
}

void Fraction::fractionadd(Fraction &f, Fraction &p) {
    int t1, b1, t2, b2, m, n, temp, x, y, z;
    t1 = f.top;
    t2 = p.top;
    b1 = f.bottom;
    b2 = p.bottom;
    y = b1 * b2;
    x = t1 * b2 + t2 * b1;
    m = x;
    n = y;
    if (m < n)
    {
        temp = m;
        m = n;
        n = temp;
    }
    for (z = n;z >= 1;z--)
    {
        if (x%z == 0 && y%z == 0) break;
    }
    x = x / z;
    y = y / z;
    cout << x << "/" << y << endl;
}

void Fraction::fractionmin(Fraction &f, Fraction &p) {
    int t1, t2, b1, b2, x, y, m, n, temp, z;
    t1 = f.top;
    t2 = p.top;
    b1 = f.bottom;
    b2 = p.bottom;
    y = b1 * b2;
    x = t1 * b2 - t2 * b1;
    m = x;
    n = y;
    if (m < n)
    {
        temp = m;
        m = n;
        n = temp;
    }
    for (z = n; z >= 1; z--)
    {
        if (x%z == 0 && y%z == 0) break;
    }
    x = x / z;
    y = y / z;
    cout << x << "/" << y << endl;
}

void Fraction::fractionmul(Fraction &f, Fraction &p) {
    int t1, t2, b1, b2, x, y, m, n, temp, z;
    t1 = f.top;
    t2 = p.top;
    b1 = f.bottom;
    b2 = p.bottom;
    y = b1 * b2;
    x = t1 * t2;
    m = x;
    n = y;
    if (m < n)
    {
        temp = m;
        m = n;
        n = temp;
    }
    for (z = n; z >= 1; z--)
    {
        if (x%z == 0 && y%z == 0) break;
    }
    x = x / z;
    y = y / z;
    cout << x << "/" << y << endl;
}

void Fraction::fractiondiv(Fraction &f, Fraction &p) {
    int t1, t2, b1, b2, x, y, m, n, temp, z;
    t1 = f.top;
    t2 = p.bottom;
    b1 = f.bottom;
    b2 = p.top;
    y = b1 * b2;
    x = t1 * t2;
    m = x;
    n = y;
    if (m < n)
    {
        temp = m;
        m = n;
        n = temp;
    }
    for (z = n; z >= 1; z --)
    {
        if (x%z == 0 && y%z == 0) break;
    }
    x = x / z;
    y = y / z;
    cout << x << "/" << y << endl;
}

void Fraction::fractioncom(Fraction &f, Fraction &p) {
    int t1, t2, b1, b2, x, y;
    t1 = f.top;
    t2 = p.top;
    b1 = f.bottom;
    b2 = p.bottom;
    y = b1 * b2;
    x = t1 * b2 - t2 * b1;
    if (x < 0) cout << f.top << "/" << f.bottom << "<" << p.top << "/" << p.bottom << endl;
    else if (x > 0) cout << f.top << "/" << f.bottom << ">" << p.top << "/" << p.bottom << endl;
    else if (x == 0) cout << f.top << "/" << f.bottom << "=" << p.top << "/" << p.bottom << endl;
}
fraction.cpp

实验总结:截图的动画是请教同学才做出来的;最后一题是在理解上才慢慢做的,有不懂的还是请教了同学,若是有问题,请各位指出。

猜你喜欢

转载自www.cnblogs.com/wjh1022/p/10747522.html