class F{
	private:
		int m,n;
	public:
        F(int,int);
        int add();
}; 
class A:public F{
	private:
		int m,n;
	public:
		A(int,int);
		int sub();
};
class B:public F{
	private:
	    int m,n;
	public:
		B(int,int);
		int mul();	
};
class C:public F{
	private:
		int m,n;
	public:
		C(int,int);
		int div();
};

  

#include"F.h"
F::F(int m0,int n0):m(m0),n(n0){}
int F::add(){
	return m+n;
}
A::A(int m0,int n0):m(m0),n(n0),F(m0,n0){}
int A::sub(){
	return m-n;
}
B::B(int m0,int n0):m(m0),n(n0),F(m0,n0){}
B::mul(){
	return m*n;
}
C::C(int m0,int n0):m(m0),n(n0),F(m0,n0){}
C::div(){
	return m/n;
}

  

#include<iostream>
#include"F.h"
using namespace std;
int main(){
	A a(9,3);
	B b(9,3);
	C c(9,3);
	cout<<a.sub()<<" "<<a.add()<<endl;
	cout<<b.mul()<<" "<<b.add()<<endl;
	cout<<c.div()<<" "<<c.add()<<endl;
	return 0;
}

  

#pragma once
#include<iostream>
using namespace std;
class Fraction {
private:
	int top;
	int bottom;
public:
	Fraction();
	Fraction(int t);
	Fraction(int t, int b);
	Fraction operator+(const Fraction &p);
	Fraction operator-(const Fraction &p);
	Fraction operator*(const Fraction &p);
	Fraction operator/(const Fraction &p);
	friend void convertF(int *x,int *y);
	friend ostream & operator<<(ostream &out, const Fraction &p);
	void ip();
};

  

#pragma once
#include"Fraction.h"
class iFraction :virtual public Fraction {
private:
	int m, n;
public:
	iFraction(int x,int y):m(x),n(y),Fraction(x,y){}
	friend void convertF(int *x,int *y);
};

  

#include"Fraction.h"
#include<iostream>
#include<cmath>
using namespace std;
Fraction::Fraction() :top(0), bottom(1) {
}
Fraction::Fraction(int t) : top(t), bottom(1) {
}
Fraction::Fraction(int t, int b) : top(t), bottom(b) {
}
Fraction Fraction::operator+(const Fraction &p) {
	int x = top * p.bottom + p.top*bottom;
	int y = bottom * p.bottom;
	return Fraction(x, y);
}
Fraction Fraction::operator-(const Fraction &p) {
	int x = top * p.bottom - p.top*bottom;
	int y = bottom * p.bottom;
	return Fraction(x, y);
}
Fraction Fraction::operator*(const Fraction &p) {
	int x = top * p.top;
	int y = bottom * p.bottom;
	return Fraction(x, y);
}
Fraction Fraction::operator/(const Fraction &p) {
	int x = top * p.bottom;
	int y = p.top*bottom;
	return Fraction(x, y);
}
void Fraction::ip() {
	cout << "输入分子" << endl;
	cin >> top;
	int bo;
	cout << "输入分母" << endl;
	cin >> bo;
	while (bo == 0) {
		cout << "请重新输入" << endl;
		cin >> bo;
	}
	bottom = bo;
}

  

#include"iFraction.h"
#include<iostream>
#include<cmath>
using namespace std;
int gct(int a, int b) {
	return a % b == 0 ? b : gct(b, a%b);
}
void convertF(int *x,int *y) {
	if (*y<0) {
		*y *= -1;
		*x *= -1;
	}
	int g = gct(abs(*x), abs(*y));
	*x /= g;
	*y /= g;
}
ostream & operator<<(ostream &out, const Fraction &p) {
	int x =p.top;
	int y =p.bottom;
	convertF(&x,&y);
	int z = x / y;
	if (x == 0)
		out << "0";
	else if (x == y)
		out << "1";
	else if (x > y)
		out <<"("<<z<<")" << x - z * y << "/" << y;
	else
	 out <<x << "/" <<y;
	return out;
}
int main() {
	Fraction a;
	Fraction b;
	iFraction d(7, 6);
	cout << d << endl;
	a.ip();
	b.ip();
	Fraction c;
	c = a + b;
	cout << c << endl;
	c = a - b;
	cout << c << endl;
	c = a * b;
	cout << c << endl;
	c = a / b;
	cout << c << endl;
	return 0;
}

  

#pragma once
class Vehicle {
private:
	int maxspeed, weight;
public:
	Vehicle(int, int);
	Vehicle(Vehicle &p);
	void run();
	void stop();
	~Vehicle() {}
};

  

#pragma once
#include"vehicle.h"
class Bicycle :virtual public Vehicle{
private:
	int height;
public:
	Bicycle(int x,int y,int z):height(x),Vehicle(y,z){}
	~Bicycle(){}
};

  

#pragma once
#include"vehicle.h"
class Motorcar :virtual public Vehicle {
private:
	int seatnum;
public:
	Motorcar(int x,int y,int z):seatnum(x),Vehicle(y,z){}
	~Motorcar(){}
};

  

#include"vehicle.h"
#include<iostream>
using namespace std;
Vehicle::Vehicle(int x, int y) :maxspeed(x),weight(y){ }
Vehicle::Vehicle(Vehicle &p) {
	maxspeed = p.maxspeed;
	weight = p.weight;
}
void Vehicle::run(){
	cout << "run" << endl;
}
void Vehicle::stop(){
	cout << "stop" << endl;
}

  

#include<iostream>
#include"motorcycle.h"
using namespace std;
int main() {
	Vehicle car(1, 1);
	Vehicle car2(car);
	Bicycle bike(1, 1, 1);
	Motorcar motorcar(1, 1, 1);
	Motorcycle motorcycle(1, 1, 1, 1, 1, 1);
	car.run();
	bike.stop();
}

  

#pragma once
#include"bicycle.h"
#include"motorcar.h"
class Motorcycle :virtual public Bicycle, virtual public Motorcar {
public:
	Motorcycle(int x, int y,int z, int a, int b,int c) :Vehicle(x,y),Bicycle(x, y,z), Motorcar(a, b,c) {}
	~Motorcycle(){}
};