实验结论

实验内容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;
} 

截图

实验总结与体会

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

 posted on 2018-06-03 21:16  梦里梦着梦不出的梦  阅读(113)  评论(0)    收藏  举报