2021-07-16水果继承

心累,还是没弄明白虚继承和虚函数
```cpp

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;


class Citrus
{
public:
    string name;
    int weight;
    Citrus(){}
    Citrus(string n,int w):name(n),weight(w){}
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is citrus fruit."<<endl;
    }
};

class Mandarin : virtual public Citrus
{
public:
    Mandarin(){};
    Mandarin(string n,int w):Citrus(n,w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is mandarin fruit."<<endl;
    }

};
class Pomelo :virtual public Citrus
{
public:
    Pomelo(){};
    Pomelo(string n,int w):Citrus(n,w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is pomelo."<<endl;
    }

};

class Citron : virtual public Citrus
{
public:
    Citron() {}
    Citron(string n, double w) : Citrus(n, w) {}
    void show()
    {
        cout << name << " " << weight << "kg, is citron.\n";
    }
};
class Orange : virtual public Mandarin, virtual public Pomelo
{
public:
    Orange() {}
    Orange(string n, double w) : Citrus(n, w) {}
    void show()
    {
        cout << name << " " << weight << "kg, is orange.\n";
    }
};

class Lime : virtual public Pomelo,virtual public Citron
{
public:
    Lime(){};
    Lime(string n,int w):Citrus(n, w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is lime."<<endl;
    }

};
class Tangerine :virtual public Mandarin,virtual public Orange
{
public:
    Tangerine(){};
    Tangerine(string n,int w):Citrus(n,w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is tangerine."<<endl;
    }

};
class Grapefruit :virtual public Pomelo,virtual public Orange
{
public:
    Grapefruit(){};
    Grapefruit(string n,int w):Citrus(n,w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is grapefruit."<<endl;
    }

};
class Lemon :virtual public Orange,virtual public Lime
{
public:
    Lemon(){};
    Lemon(string n,int w): Citrus(n, w){};
     void show()
    {
        cout<<name<<" "<<weight<<"kg, is lemon."<<endl;
    }

};


int main()
{
    Citrus     *c;
    Mandarin   *ma;
    Pomelo     *po;
    Citron     *ci;
    Orange     *og;
    Lime       *li;
    Tangerine  *ta;
    Grapefruit *gr;
    Lemon      *le;

    string name;
    double weight;
    while(cin >> name >> weight)
    {
        if(name == "Tangerine")
        {
            Tangerine tangerine(name, weight);
            c = ma = og = ta = &tangerine;
            c->show();
            ma->show();
            og->show();
            ta->show();
        }
        if(name == "Grapefruit")
        {
            Grapefruit grapefruit(name, weight);
            c = po = gr = &grapefruit;
            c->show();
            po->show();
            gr->show();
        }
        if(name == "Lemon")
        {
            Lemon lemon(name, weight);
            ma = og = &lemon;
            ci = li = &lemon;
            po = le = &lemon;
            ma->show();
            po->show();
            ci->show();
            og->show();
            li->show();
            le->show();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值