实验 6 继承 和多态

四.

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

转载于:https://www.cnblogs.com/sjcnb/p/9146921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值