四.
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来运行重载运算符的话会提示“=”的地方出现错误,这两个地方不太懂