C++实验6

实验结论

实验内容1
源码
main.cpp

#include<iostream>
#include"chip.h"
using namespace std;
int main(){
    int m,n;
    cout<<"输入两个数m,n"<<endl;
    cin>>m>>n;
    Basic base(m,n);
    A a(m,n);
    B b(m,n);
    C c(m,n);
    base.add() ;
    a.add() ;
    a.sub() ;
    b.add() ;
    b.mul() ;
    c.add() ;
    c.div() ;
    return 0;
}

chip.h

#include<iostream>
using namespace std;
class Basic {
public:
    Basic(int m0,int n0):m(m0),n(n0) {}
    int add() { cout << "m + n = " << m + n << endl; }
    int m, n;
};
class A : public Basic {
public:
    A(int m0, int n0) : Basic(m0,n0) {}
    int sub() { cout << "m - n = " << m - n << endl; }
};
class B : public Basic {
public:
    B(int m0, int n0) : Basic(m0,n0) {}
    int mul() { cout << "m * n = " << m * n << endl; }
};
class C : public Basic {
public:
    C(int m0, int n0) : Basic(m0,n0) {}
    double div() { cout << "m / n = " << double(m) / n << endl; }
};

截图

实验内容2
源码
main.cpp

#include<iostream>
#include"vehicle.h" 
using namespace std;
int main(){
    Motorcycle mc(1,2,3,4);
    mc.run() ;
    mc.stop() ;
    return 0;
} 

vehicle.h

#include<iostream>
using namespace std;
class Vehicle{
    public:
        Vehicle(int m,int w):maxspeed(m),weight(w){}
        int maxspeed,weight;
        void run(){cout<<"run"<<endl;}
        void stop(){cout<<"stop"<<endl;}
        ~Vehicle(){}
};
class Bicycle:virtual public Vehicle{
    public:
        Bicycle(int m,int w,int h):Vehicle(m,w),height(h){}
        int height;
};
class Motorcar:virtual public Vehicle{
    public:
        Motorcar(int m,int w,int s):Vehicle(m,w),seatnum(s){}
        int seatnum;
};
class Motorcycle:public Bicycle,public Motorcar{
    public:
        Motorcycle(int m,int w,int h,int s):Vehicle(m,w),Bicycle(m,w,h),Motorcar(m,w,s){}
};

截图

实验内容3
源码
main.cpp

#include<iostream>
#include"fraction.h"
using namespace std;
int main(){
    Fraction p1(3,5),p2(4,7),p3;
    p3=p1+p2;
    cout<<p3<<endl;
    p3=p1-p2;
    cout<<p3<<endl;
    p3=p1*p2;
    cout<<p3<<endl;
    p3=p1/p2;
    cout<<p3<<endl;
    iFraction p(3,5);
    p.show();
    return 0;
} 

fraction.h

#include<iostream>
using namespace std;
class Fraction{
    public:
        Fraction(){
        }
        Fraction(int t0,int b0);
        friend Fraction operator+(const Fraction &p1,const Fraction &p2);
        friend Fraction operator-(const Fraction &p1,const Fraction &p2);
        friend Fraction operator*(const Fraction &p1,const Fraction &p2);
        friend Fraction operator/(const Fraction &p1,const Fraction &p2);
        friend ostream& operator<<(ostream &out,const Fraction &p);
        int top;
        int bottom;
};
class iFraction:public Fraction{
    public:
        iFraction(){
        }
        iFraction(int t0,int b0);
        void show();
};

fraction.cpp

#include"fraction.h"
#include<iostream>
#include<cmath>
using namespace std;
int gys(int x,int y)//求最大公约数 
{
    int m=1,a=x,b=y;
    for(;m!=0;)
    {
        m=a%b;a=b;b=m;
    }
    return a;
}
//Fraction类的实现
int m;//m为分子分母最大公约数 
int bottom,top;
Fraction::Fraction(int t0,int b0):top(t0),bottom(b0){}//构造函数重载
Fraction operator+(const Fraction &p1,const Fraction &p2){
    bottom=p1.bottom*p2.bottom;
    top=p1.top*p2.bottom+p1.bottom*p2.top;
    m=gys(fabs(top),fabs(bottom));
    top/=m,bottom/=m;
    return(Fraction(top,bottom));  
}
Fraction operator-(const Fraction &p1,const Fraction &p2){
    bottom=p1.bottom*p2.bottom;
    top=p1.top*p2.bottom-p1.bottom*p2.top;
    m=gys(fabs(top),fabs(bottom));
    top/=m,bottom/=m;  
    return(Fraction(top,bottom));
}
Fraction operator*(const Fraction &p1,const Fraction &p2){ 
    top=p1.top*p2.top,bottom=p1.bottom*p2.bottom;
    m=gys(fabs(top),fabs(bottom));
    top/=m,bottom/=m;
    return(Fraction(top,bottom));
}
Fraction operator/(const Fraction &p1,const Fraction &p2){
    top=p1.top*p2.bottom,bottom=p1.bottom*p2.top;
    m=gys(fabs(top),fabs(bottom));
    top/=m,bottom/=m;  
    return(Fraction(top,bottom));
}
ostream& operator<<(ostream &out,const Fraction &p){
    out<<p.top<<"/"<<p.bottom;
    return out;
} 
iFraction::iFraction(int t0,int b0):Fraction(t0,b0){}
void iFraction::show(){
    cout<<top<<"/"<<bottom<<endl;
} 

截图

实验总结与体会

基本掌握了运算符重载,同时了解到友元函数不属于类的成员,不能被继承

猜你喜欢

转载自www.cnblogs.com/wyqwyq/p/9130231.html