实验 6 继承 和多态

四.

1.

Base.h

#include<iostream>
using namespace std;
class Base{
    public:
        Base(int a,int b);
        int plus();
    private:
        int m;
        int n;
};
Base::Base(int a,int b){
    m=a;
    n=b;
}
int Base::plus(){
    cout<<m+n<<endl;
}

A.h

#include<iostream>
using namespace std;
class A:public Base{
    public:
        A(int a,int b);
        int minus();
    private:
        int m;
        int n;
};

A::A(int a,int b):Base(a,b){
    m=a;
    n=b;    
}

int A::minus(){
    
    cout<<m-n<<endl;
}

B.h

#include<iostream>
using namespace std;
class B:public Base{
    public:
        B(int a,int b);
        int multiply();
    private:
        int m;
        int n;
};
B::B(int a,int b):Base(a,b){
    
    m=a;
    n=b;
    
}
int B::multiply(){
    
    cout<<m*n<<endl;
}

C.h

#include<iostream>
using namespace std;
class C:public Base{
    public:
        C(int a,int b);
        int divide();
    private:
        int m;
        int n;
};
C::C(int a,int b):Base(a,b){
    
    m=a;
    n=b;
    
}
int C::divide(){
    
    cout<<m/n<<endl;
}

main.cpp

#include<iostream>
#include"Base.h"
#include"A.h"
#include"B.h"
#include"C.h"
using namespace std;
int main()
{
    int x,y;
    cin>>x>>y;
    A a(x,y);
    B b(x,y);
    C c(x,y);
    a.plus();
    a.minus();
    b.plus();
    b.multiply();
    c.plus();
    c.divide();
    return 0;
}

2.

vehicle.h

#include<iostream>
using namespace std;
class vehicle{
    public:
        vehicle(int maxspeed,int weight);
        int run();
        int stop();
        ~vehicle(){}
    private:
        int m,w;
};
vehicle::vehicle(int maxspeed,int weight){
    m=maxspeed;
    w=weight;
    cout<<m<<" "<<w<<" ";
}
int vehicle::run(){
    cout<<endl;
    cout<<"run"<<endl;
}
int vehicle::stop(){
    cout<<"stop"<<endl;
}

bicycle.h

#include<iostream>
using namespace std;
class bicycle:virtual public vehicle{
    public:
        bicycle(int maxspeed,int weight,int height);
        ~bicycle(){}
    private:
        int m;
        int w;
        int h;
};

bicycle::bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight){
    m=maxspeed;
    w=weight;
    h=height;
    cout<<h<<" ";    
}

motorcar.h

#include<iostream>
using namespace std;
class motorcar:virtual public vehicle{
    public:
        motorcar(int maxspeed,int weight,int seatnum);
        ~motorcar(){}
    private:
        int m;
        int w;
        int s;
};

motorcar::motorcar(int maxspeed,int weight,int seatnum):vehicle(maxspeed,weight){
    m=maxspeed;
    w=weight;
    s=seatnum;
    cout<<s<<" ";    
}

motorcycle.h

#include<iostream>
using namespace std;
class motorcycle:virtual public vehicle,virtual public bicycle,virtual public motorcar{
    public:
        motorcycle(int maxspeed,int weight,int height,int seatnum);
        ~motorcycle(){}
    private:
        int m;
        int w;
        int h;
        int s;
        
};
motorcycle::motorcycle(int maxspeed,int weight,int height,int seatnum):vehicle(maxspeed,weight),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,seatnum){
    
    m=maxspeed;
    w=weight;
    h=height;
    s=seatnum;
    
    
}

main.cpp

#include<iostream>
#include<vehicle.h>
#include<bicycle.h>
#include<motorcar.h>
#include<motorcycle.h>
using namespace std;
int main()
{
    int e,f,g,h;
    cin>>e>>f>>g>>h;
    vehicle a(e,f);
    a.run();
    a.stop();
    bicycle b(e,f,g);
    b.run();
    b.stop();
    motorcar c(e,f,h);
    c.run();
    c.stop();
    motorcycle d(e,f,g,h);
    d.run();
    d.stop();
    return 0;
}

3.

 Fraction.h

#include<iostream>
using namespace std;
class Fraction {
    public:
        Fraction();
        Fraction(int a);
        Fraction(int a, int b);   
        Fraction operator+(Fraction &q);
        Fraction operator-(Fraction &q);
        Fraction operator*(Fraction &q);
        Fraction operator/(Fraction &q);     
        void compare(Fraction &p,Fraction &q);
        void output();
    private:
        int top;
        int bottom;
};

Fraction.cpp

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

Fraction::Fraction(): top(0),bottom(1){
}
Fraction::Fraction(int a): top(a),bottom(1){
}
Fraction::Fraction(int a, int b): top(a),bottom(b){
}
void Fraction::output(){cout<<top<<'/'<<bottom<<endl;
}
Fraction Fraction::operator+(Fraction &q){
    Fraction a;
    a.top=top*q.bottom+bottom*q.top;
    a.bottom=bottom*q.bottom;
    return a;
}
Fraction Fraction::operator-(Fraction &q){
    Fraction a;
    a.top=top*q.bottom-bottom*q.top;
    a.bottom=bottom*q.bottom;
    return a;
}
Fraction Fraction::operator*(Fraction &q){
    Fraction a;
    a.top=top*q.top;
    a.bottom=bottom*q.bottom;
    return a;
}
Fraction Fraction::operator/(Fraction &q){
    Fraction a;
    a.top=top*q.bottom;
    a.bottom=bottom*q.top;
    return a;
}
void Fraction::compare(Fraction &p,Fraction &q){
    if(p.top/p.bottom>q.top/q.bottom)
    cout<<"a>b"<<endl;
    else if (p.top/p.bottom<q.top/q.bottom)
    cout<<"a<b"<<endl;
    else if (p.top/p.bottom==q.top/q.bottom)
    cout<<"a=b"<<endl;
}

iFraction.h

#include <iostream>
using namespace std;
class iFraction:public Fraction{
    public:
    iFraction():Fraction(){
        top=0;
        bottom=1;
    }
    iFraction(int a):Fraction(a){
        top=a;
        bottom=1;
    }
    iFraction(int a,int b):Fraction(a,b){
        top=a;
        bottom=b;
    }
    int convertF();
    private:
    int top,bottom;
};

iFraction.cpp

#include <iostream>
#include"iFraction.h"
using namespace std;
int iFraction::convertF(){
    int t=0,x,y;
    if(top>=bottom){
    x=top;
    y=bottom;
    if(x%y!=0)
    {
        while(x>y)
        {
            x=x-y;
            t++;
        }
        cout<<t<<"'"<<x<<"/"<<y<<endl;
    }
    if(x%y==0)
    cout<<x/y<<endl;
}
if(top<bottom)
cout<<top<<"/"<<bottom<<endl;
}

main.cpp

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


int main() {
    
    Fraction a;
    Fraction b(3,4);
    Fraction c(5);
    Fraction d;
    d=b+c;
    d.output();
    d=b-c;
    d.output();
    d=b*c;
    d.output();
    d=b/c;
    d.output();    
    d.compare(b,c);     
    iFraction u(5,3);
    u.convertF();           
    return 0; 
}

五.

最后一题的若改成友元函数会提示无法访问Fraction的私有成员,假如直接用iFraction来运行重载运算符的话会提示“=”的地方出现错误,这两个地方不太懂

猜你喜欢

转载自www.cnblogs.com/sjcnb/p/9146921.html