实验4 类与对象2

实验结论

1.实验内容2

(1)类graph的成员draw()中算法的简洁描述:
最外层for循环用来控制行数,for循环内第一个for循环用来输出符号前的空格(“总行数-当前行数”个空格),第二个for循环用来输出符号(“2*当前行数-1”个符号),一行输出完毕后,换至下一行,直至输出所有行。

(2)文件源码

  • graph.h
#ifndef GRAPH_H
#define GRAPH_H

// 类Graph的声明
class Graph {
public:
    Graph(char ch, int n);   // 带有参数的构造函数
    void draw();     // 绘制图形
private:
    char symbol;
    int size;
};
#endif
  • graph.cpp
// 类graph的实现

#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;i++){        //控制行数
        for (int j=1;j<=size-i;j++){    //输出符号前的空格
            cout<<' ';
        }
        for (int m=1;m<=2*i-1;m++){     //输出图案符号
            cout<<symbol;
        }
        cout<<endl;                 //换至下一行
    }
}
  • 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()在屏幕上绘制图形
    
    return 0;
}

(3) Xcode 下运行结果截图:

2.实验内容3

(1)类Fraction的类图

Fraction

-top:int

-bottom:int

+Fraction()

+Fraction(t:int,b:int)

+Fraction(t:int)

+Fraction(f0:Fraction)

+add(f0:Fraction):void

+min(f0:Fraction) :void

+mul(f0:Fraction) :void

+div(f0:Fraction):void

+Compare(f0:Fraction):void

+set() :void

+show() :void

(2)文件源码

Fraction.h

#ifndef Fraction_h
#define Fraction_h
// 类Fraction的声明
class Fraction {
public:
    Fraction();            //构造函数
    Fraction(int t, int b);  //构造函数的重载
    Fraction(int t);         //构造函数的重载
    void add(Fraction &f0);//加法函数
    void min(Fraction &f0);//减法函数
    void mul(Fraction &f0);//乘法函数
    void div(Fraction &f0);//除法函数
    void Compare(Fraction &f0);//比较函数
    void set();                //输入函数
    void show();              //输出函数
    
private:
    int top;       //分子
    int bottom;    //分母
};

#endif /* Fraction_h */

Fraction.cpp

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

//构造函数
Fraction::Fraction():top(0), bottom(1) {
}

//构造函数的重载
Fraction::Fraction(int t,int b):top(t), bottom(b){
}

//构造函数的重载
Fraction::Fraction(int t):top(t), bottom(1) {
}

//输入函数
void Fraction::set(){
    cin>>top>>bottom;
}

//输出函数
void Fraction::show(){
    cout << top << "/" << bottom <<endl;
}

//加法函数
void Fraction::add(Fraction &f0){
    Fraction f1;
    f1.top = top * f0.bottom + f0.top * bottom;
    f1.bottom = bottom * f0.bottom;
    f1.show();
}

//减法函数
void Fraction::min(Fraction &f0){
    Fraction f1;
    f1.top = top * f0.bottom - f0.top * bottom;
    f1.bottom = bottom * f0.bottom;
    f1.show();
}

//乘法函数
void Fraction::mul(Fraction &f0){
    Fraction f1;
    f1.top = top * f0.top;
    f1.bottom = bottom * f0.bottom;
    f1.show();
}

//除法函数
void Fraction::div(Fraction &f0) {
    Fraction f1;
    f1.top = top * f0.bottom;
    f1.bottom = bottom * f0.top;
    f1.show();
}

//比较大小函数
void Fraction::Compare(Fraction &f0) {
    Fraction f1;
    f1.top = top * f0.bottom - f0.top * bottom;
    if(f1.top > 0){
        cout << top << "/" << bottom << ">" << f0.top << "/" << f0.bottom <<endl;
    }
    else if(f1.top < 0) {
        cout << top << "/" << bottom << "<" << f0.top << "/" << f0.bottom <<endl;
    }
    else{
        cout << top << "/" << bottom << "=" << f0.top << "/" << f0.bottom <<endl;
    }
}

main.cpp

#include <stdio.h>
#include "Fraction.h"
using namespace std;
int main() {
    Fraction a;
    Fraction b(3,4);
    Fraction c(5);
    a.show();
    b.show();
    c.show();
    c.add(b);
    c.min(b);
    c.mul(b);
    c.div(b);
    c.Compare(b);
    a.set();
    a.show();
    return 0;
}

(3) Xcode 下运行结果截图

实验总结与体会

对新学的构造函数的初始化方法还不够熟练。
对是否需要形参和返回值,以及返回值的类型不清楚。
原本我对多文件的运用一脸懵逼,通过这次实验,有种豁然开朗的感觉,所谓实践出真知~

原文地址:https://www.cnblogs.com/jiahewang/p/8922596.html