• 实验6


    第一题:

    代码:

    //Base.h(基类)
    #pragma once
    #include<iostream>
    using namespace std;
    class Base {
    private:
        int m, n;
    public:
        Base(int a, int b) :m(a), n(b) {};
        void plus() {
            cout << "m+n=" << m + n << endl;
        }
        int getm()const { return m; }
        int getn()const { return n; }
    };
    //A.h(派生类)
    #pragma once
    #include"Base.h"
    #include<iostream>
    using namespace std;
    class A :public Base {
    public:
        A(int a, int b) :Base(a, b) {};
        void min() {
            int x = getm();
            int y = getn();
            cout << "m-n=" << x - y << endl;
        }
    };
    class B :public Base {
    public:
        B(int a, int b) :Base(a, b) {};
        void mul() {
            int x = getm();
            int y = getn();
            cout << "m*n=" << x * y << endl;
        }
    };
    class C :public Base {
    public:
        C(int a, int b) :Base(a, b) {};
        void div() {
            int x = getm();
            int y = getn();
            cout << "m/n=" << x / y << endl;
        }
    };
    //main.cpp
    #include"Base.h"
    #include"A.h"
    #include<iostream>
    using namespace std;
    int main() {
        A core1(4, 2); B core2(4, 2); C core3(4, 2);
        core1.plus(); core1.min();
        core2.plus(); core2.mul();
        core3.plus(); core3.div();
        return 0;
    }

    运行效果:

    第二题:

    //vehicle.h
    #pragma once
    #include<iostream>
    using namespace std;
    class vehicle {                     //基类
    private:
        int maxspeed; int weight;
    public:
        vehicle(int a, int b) :maxspeed(a), weight(b) {
            cout << "maxspeed=" << maxspeed << " weight=" << weight << endl;
        };
        void run() {
            cout << "run" << endl;
        }
        void stop() {
            cout << "stop" << endl;
        }
        ~vehicle() {}
    };
    class bicycle:virtual public vehicle {        //派生类(自行车)
    private:
        int height;
    public:
        bicycle(int a, int b, int c):vehicle(a, b) {
            height = c;
            cout << "height=" << height << endl;
        }
        ~bicycle() {}
    };
    class motorcar :virtual public vehicle {      //派生类(摩托车)
    private:
        int seatnum;
    public:
        motorcar(int a, int b, int c) :vehicle(a, b) {
            seatnum = c;
            cout << "seatnum=" << seatnum << endl;
        }
        ~motorcar(){}
    };
    //main.cpp
    #include<iostream>
    #include"vehicle.h"
    using namespace std;
    int main() {
        bicycle giant(20, 3, 1);
        giant.run(); giant.stop();
        motorcar Harley(60, 30, 2);
        Harley.run(); Harley.stop();
        return 0;
    }

    运行效果:

     第三题:

    代码:

    //Fraction.h部分
    #pragma once
    class Fraction {
    public:
        Fraction();            //构造函数
        Fraction(int t, int b);//构造函数(函数重载)
        Fraction(int t);       //构造函数(函数重载)
        Fraction operator+(const Fraction &f1)const;//分数相加
        Fraction operator-(const Fraction &f1)const;//分数相减
        Fraction operator*(const Fraction &f1)const;//分数相乘
        Fraction operator/(const Fraction &f1)const;//分数相除
        int gett() { return top; }int getb() { return bottom; }
        void show();
    private:
        int top; int bottom;   //top为分子,bottom为分母
    };
    //iFraction.h部分
    #pragma once
    #include<iostream>
    #include"Fraction.h"
    using namespace std;
    class iFraction :public Fraction {
    public:
        iFraction(int t, int b) :Fraction(t, b) {}
        iFraction(int t):Fraction(t){}
        iFraction():Fraction(){}
        void show();
        void convertF();
    };
    //Fraction.cpp部分
    #include<iostream>
    #include"Fraction.h"
    using namespace std;
    int sim(int t, int j) {    //sim函数,功能为找出分子与分母的最大公约数
        int a, b, i, m, c;
        a = t; b = j;
        if (a >= b)m = b;
        else m = a;
        for (i = 1; i <= m; i++)
        {
            if (a%i == 0 && b%i == 0)c = i;
        }
        return c;               //返回值为最大公约数c
    }
    Fraction::Fraction() {      //Fraction函数的实现
        top = 0; bottom = 1;
    }
    Fraction::Fraction(int t, int b) { //Fraction函数的实现(函数重载)
        top = t; bottom = b;
    }
    Fraction::Fraction(int t) {        //Fraction函数的实现(函数重载)
        top = t; bottom = 1;
    }
    Fraction Fraction::operator+(const Fraction &f1)const {
        int x, y;
        x = bottom * f1.bottom; y = top * f1.bottom + bottom * f1.top;
        return(Fraction(y, x));
    }
    Fraction Fraction::operator-(const Fraction &f1)const {    //分数减法sub函数的实现
         Fraction f2; int x, y;
         y = top * f1.bottom - f1.top*bottom;
         x = bottom * f1.bottom;
         return(Fraction(y, x));
     }
    Fraction Fraction::operator*(const Fraction &f1)const {    //分数乘法mul函数的实现
         int x, y;
         y =top*f1.top;
         x =bottom*f1.bottom;
         return(Fraction(y, x));
     }
    Fraction Fraction::operator/(const Fraction &f1)const {    //分数除法div函数的实现
         int x, y;
         y =top*f1.bottom;
         x = bottom * f1.top;
         return(Fraction(y, x));
     }
    void Fraction::show() {               //show函数的实现
        if (top > 0 && bottom > 0) {
            int c;
            c = sim(top, bottom);
            cout <<"("<< top / c << "/" << bottom / c <<")"<< endl;//分子分母同除以最大公约数得到最简形式(扩展)
        }
        if (top < 0 && bottom>0) {
            int c; c = sim(-top, bottom);
            cout <<"("<< top / c << "/" << bottom / c <<")"<< endl;//分子分母同除以最大公约数得到最简形式(扩展)
        }
        if (top > 0 && bottom < 0) {
            int c; c = sim(top, -bottom);
            cout <<"("<< -top / c << "/" << -bottom / c <<")"<< endl;//将分母的负号移动至分子上(扩展)
        }
        if (top < 0 && bottom < 0) {
            int c; c = sim(-top, -bottom);
            cout <<"("<< -top / c << "/" << -bottom / c <<")"<< endl;//分子分母同为负数时去除负号
        }
        if (top == 0) cout <<"("<< top << "/" << bottom <<")"<< endl;
    }
    //iFraction.cpp部分
    #include<iostream>
    #include"Fraction.h"
    #include"iFraction.h"
    #include<cmath>
    using namespace std;
    int sim(int t, int j) {    //sim函数,功能为找出分子与分母的最大公约数
        int a, b, i, m, c;
        a = t; b = j;
        if (a >= b)m = b;
        else m = a;
        for (i = 1; i <= m; i++)
        {
            if (a%i == 0 && b%i == 0)c = i;
        }
        return c;               //返回值为最大公约数c
    }
    void iFraction::show() {
        if (gett() > 0 && getb() > 0) {
            int c;
            c = sim(gett(), getb());
            cout <<"("<< gett() / c << "/" << getb() / c <<")"<< endl;//分子分母同除以最大公约数得到最简形式
        }
        if (gett() < 0 && getb()>0) {
            int c; c = sim(-gett(), getb());
            cout <<"("<< gett() / c << "/" << getb() / c <<")"<< endl;//分子分母同除以最大公约数得到最简形式
        }
        if (gett() > 0 && getb() < 0) {
            int c; c = sim(gett(), -getb());
            cout <<"("<< -gett() / c << "/" << -getb() / c <<")"<< endl;//将分母的负号移动至分子上
        }
        if (gett() < 0 && getb() < 0) {
            int c; c = sim(-gett(), -getb());
            cout <<"("<< -gett() / c << "/" << -getb() / c <<")"<< endl;//分子分母同为负数时去除负号
        }
        if (gett() == 0) {
            cout << "(" << gett() << "/" << getb() << ")" << endl;
        }
    }
    void iFraction::convertF() {
        if (abs(gett()) / abs(getb())>=1&&abs(gett())%abs(getb())) {
            int m = gett() / getb();
            int n = gett() - m * getb();
            iFraction f1(n, getb());
            cout << m; f1.show();
        }
    
    //main.cpp部分
    #include<iostream>
    #include"Fraction.h"
    #include"iFraction.h"
    using namespace std;
    int main() {
        iFraction f1;
        iFraction f2(5);
        iFraction f3(3, 6);
        iFraction f4(-5, 6);
        iFraction f5(3, -4);
        iFraction f6(-5, -6);
        iFraction f7(5, 3);
        f1.show(); f2.show(); f3.show(); f4.show(); f5.show(); f6.show(); f7.convertF();
        Fraction f8(3, 6);
        Fraction f9(-5, 6); Fraction f10 = f8 + f9; f10.show();
        f10 = f8 * f9; f10.show(); f10 = f9 / f8; f10.show(); f10 = f8 - f9; f10.show();
        return 0;
    }

    运行效果:

    实验总结与反思:

    最近事情比较多,写得比较粗糙,最后一道题还没有写,过两天我再用另一篇随笔补上吧。

  • 相关阅读:
    无缘无故Spring MVC报错空指针异常
    无缘无故Spring MVC报错空指针异常
    无缘无故Spring MVC报错空指针异常
    SpringMVC整合Shiro
    SpringMVC整合Shiro
    SpringMVC整合Shiro
    (数据挖掘)大数据Flume+kafka+zookeeper+Strom/Spark/Fink......
    (数据分析)大数据Flume+kafka+zookeeper+Strom/Spark/Fink......
    java中的堆、栈和方法区
    mvn clean -U -e -B -X的作用+如何在eclipse中使用mvn clean -U -e -B -X?
  • 原文地址:https://www.cnblogs.com/hero-1/p/9136635.html
Copyright © 2020-2023  润新知