第一题
#include <iostream>
using namespace std;
class M{ //定义M基类
public:
int m,n;
M(int i,int j):m(i),n(j){}
~M() {} //析构函数
int add(){cout<<"m+n="<<m+n<<endl;} //三个芯片中都存在的加法
};
class A:public M //公有派生,继承M中的加法
{
public:
A(int i,int j):M(i,j),m(i),n(j){}
~A(){}
int minus(){cout<<"m-n="<<m-n<<endl;}
int m,n;
} ;
class B:public M
{
public:
B(int i,int j):M(i,j),m(i),n(j){}
~B(){}
int multiplication(){cout<<"m*n="<<m*n<<endl;}
int m,n;};
class C:public M
{
public:
C(int i,int j):M(i,j),m(i),n(j) {}
~C(){}
int division(){cout<<"m/n="<<m/n<<endl; }
int m,n;};
int main()
{
cout<<"输入两个数"<<endl;
int m,n;
cin>>m>>n; //输入m,n的值
A a(m,n);
a.add() ; //访问函数成员
a.minus();
cin>>m>>n;
B b(m,n);
b.add();
b.multiplication();
cin>>m>>n;
C c(m,n);
c.add();
c.division();
cin>>m>>n;
return 0;
};
运行结果

这题我刚开始在每一个类中都插入了私有函数成员,后来发现是多此一举的,只要在每个的结构中都声明一下m,n便可以。这道题主要掌握的便是派生的结构,以定义类为例 class A:public base, 从而就不用反复写这三个模板中都具有的加法函数了。做题的时候脑子有点糊,在main 函数中测试A芯片时忘记写输入m,n值的语句了,结果还调试了半天,基础知识掌握不牢,这方面还很有待加强。
第二题
#include <iostream>
using namespace std;
class vehicle //定义车这个基类
{
protected:
int maxspeed,weight; //定义protected类数据成员maxspeed和weight
public: //公有端接口
~vehicle(){} //析构函数
vehicle (int m, int w):maxspeed(m),weight(w){} //构造函数
void run() //函数成员run()
{
cout<<"启动"<<endl;
}
void stop() //函数成员stop()
{
cout<<"停止"<<endl;
}
};
class bicycle: virtual public vehicle{ //派生出自行车类
protected:
int height; //新增数据成员height
public:
~bicycle (){} //析构函数
bicycle (int m, int w, int h):vehicle(w,h),height(h){}
void run()
{
cout<<"自行车高度:"<<height<<endl;
}
void stop()
{
cout<<"自行车停止"<<endl;
}
};
class motorcar:virtual public vehicle //这部分结构和自行车类似,派生出汽车类
{
protected:
int seatnum; //新增数据函数seatsum
public:
~motorcar(){}
motorcar(int m, int w, int s):vehicle(m,w),seatnum(s){}
void run()
{
cout<<"汽车位置数:"<<seatnum<<endl;
}
void stop()
{
cout<<"汽车停止"<<endl;
}
} ;
class motorcycle: public bicycle, public motorcar //从自行车和汽车中派生出摩托车
{
public:
~motorcycle(){}
motorcycle(int m, int w, int h, int s):vehicle(m,w),bicycle(m,w,h),motorcar(m,w,s){} //所有数据函数都要包括
void run()
{
cout<<"摩托车启动"<<endl;
}
void stop()
{
cout<<"摩托车停止"<<endl;
}
};
int main()
{
motorcycle a(200,80,2,3);
cout<<"最大速度:"<<endl;
cout<<"重量:"<<endl;
cout<<"自行车高度"<<endl;
cout<<"汽车位置数量"<<endl;
a.run();
a.stop();
return 0;
} 运行结果截图
这题的大体结构和第一题是类似的,但是每个模板都有新增成员函数,这些成员函数便属于它们的保护类了,但是这题的结果还是不对,我运行之后并没有显示出自己输入的数据,不懂问题出在哪里。
第三题
Fraction.h
#include <iostream>
using namespace std;
class Fraction{
public:
Fraction(int i,int j):top(i),bottom(j){}
Fraction operator+(const Fraction &a)const;
Fraction operator-(const Fraction &a)const;
Fraction operator*(const Fraction &a)const;
Fraction operator/(const Fraction &a)const;
void show() const;
private:
int top;
int bottom;
};
Fraction.cpp
#include <iostream>
#include <Fraction.h>
using namespace std;
Fraction Fraction ::operator+(const Fraction &a)const{
return Fraction(top+a.top,bottom+a.bottom);
}
Fraction Fraction::operator-(const Fraction &a)const{
return Fraction (top-a.top,bottom-a.bottom);
}
Fraction Fraction::operator*(const Fraction &a)const{
return Fraction(top*a.top, bottom*a.bottom);
}
Fraction Fraction::operator/(const Fraction &a)const{
return Fraction(top/a.top,bottom/a,bottom);
}
void Fraction::display()const{
cout<<"("<<top<<","<<bottom<<")"<<endl;
}
int main()
Fraction m(5,4),a(2,10),n;
cout<<"m=";m.display();
cout<<"a=";a.display();
n=m-a;
cout<<"n=m-a";n.display();
n=m+a;
cout<<"n=m+a";n.display();
n=m*a;
cout<<"n=m*a";n.display();
n=m/a;
cout<<"n=m/a";n.display();
return 0;
}
iFration.h
#include"Fraction.h"
class iFraction:public Fraction {
public:
iFraction(int i=0,int j=1);
void print();
~iFraction();
friend iFraction convertF(iFraction &a);
};
表示最后两个没写出来,我明天再改改。。。。
来源:https://www.cnblogs.com/yyq828/p/9136860.html