OJ 2309 Problem C Lemon

Description

Jackie开了一家水果店,店里柑橘类(Citrus)水果销售情况特别好,刚刚进货了一些砂糖柑(Tangerine)、葡萄柚(Grapefruit)和柠檬(Lemon)。
他有兴趣研究了柑橘类水果的杂交过程(如下图所示):首先,橘子(Mandarin)、柚子(Pomelo)和香橼(Cirton)都是柑橘类(Citrus)的水果,这是第一层;其次,第二层的水果是橙子(Orange)和青柠(Lime),橙子是橘子和柚子杂交出来的,柚子和香橼杂交出了青柠;最后是第三层,橘柑(砂糖柑)是橘子和橙子杂交的产物,葡萄柚是橙子和柚子杂交的结果,橙子和青柠杂交产生了柠檬。
请你编写程序用派生树来描述柑橘类水果的杂交关系,用继承关系来表示柑橘类水果的杂交过程。
用C++编写Citrus类及其派生树上的各个类来来完成代码,调用格式见“Append Code”。
Citrus类及其派生树上的这些类的属性是名称(name)和重量(weight)、有show()函数用来显示一些信息。各类的构造根据给出的调用代码完成。

在这里插入图片描述

Input

输入为多行,每行是一种水果的名称和重量。

Output

按格式输出水果的信息,详细见输出样例。

Sample Input

Tangerine 150
Grapefruit 200
Lemon 1000

Sample Output

Tangerine 150kg, is citrus fruit.
Tangerine 150kg, is mandarin.
Tangerine 150kg, is orange.
Tangerine 150kg, is tangerine.
Grapefruit 200kg, is citrus fruit.
Grapefruit 200kg, is pomelo.
Grapefruit 200kg, is grapefruit.
Lemon 1000kg, is mandarin.
Lemon 1000kg, is pomelo.
Lemon 1000kg, is citron.
Lemon 1000kg, is orange.
Lemon 1000kg, is lime.
Lemon 1000kg, is lemon.

HINT

Append Code

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();
        }
    }
}

Accepted Code

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

class Citrus {
protected:
    string name;
    double weight;
    //string name_Citrus;
    //double weight_Citrus;
public:
    Citrus(string n = "", double w = 0) : name(n), weight(w) {}
    void show() {
        cout << name << " " << weight << "kg, is citrus fruit.\n";
    }
};
class Mandarin :virtual public Citrus{
    //string name_Mandarin;
    //double weight_Mandarin;
public:
    Mandarin(string n = "", double w = 0) :Citrus(n , w){}
    void show() {
        cout << name << " " << weight << "kg, is mandarin.\n";
    }
};
class Pomelo :virtual public  Citrus {
    //string name_Pomelo;
    //double weight_Pomelo;
public:
    Pomelo(string n = "", double w = 0):Citrus(n ,w) {}
    void show() {
        cout << name << " " << weight << "kg, is pomelo.\n";
    }
};
class Citron :virtual public Citrus {
   // string name_Citron;
    //double weight_Citron;
public:
    Citron(string n = "", double w=0):Citrus(n, w) {}
    void show() {
        cout << name << " " << weight << "kg, is citron.\n";
    }
};

class Orange :virtual public Mandarin, virtual public Pomelo {
    //string name_Orange;
    //double weight_Orange;
public:
    Orange(string n = "", double w = 0):Mandarin(n, w ), Pomelo(n ,w ), Citrus(n, w) {}

    void show() {
        cout << name << " " << weight << "kg, is orange.\n";
    }
};

class Lime :virtual public Pomelo, virtual public Citron {
    //string name_Lime;
    //double weight_Lime;
public:
    Lime(string n = "", double w = 0) :Pomelo(n, w), Citron(n, w), Citrus(n, w) {}
    void show() {
        cout << name << " " << weight << "kg, is lime.\n";
    }
};
class Tangerine :virtual public  Mandarin, virtual public Orange {
    //string name_Tangerine;
    //double weight_Tangerine;
public:
    Tangerine(string n = "", double w = 0) :Mandarin(n, w), Orange(n, w), Pomelo(n, w) , Citrus(n, w) {}
    void show() {
        cout << name << " " << weight << "kg, is tangerine.\n";
    }
};

class Grapefruit :virtual public Orange, virtual public Pomelo {
    //string name_Grapefruit;
    //double weight_Grapefruit;
public:
    Grapefruit(string n = "", double w = 0) : Orange(n, w), Pomelo(n, w), Mandarin(n, w), Citrus(n, w){}
    void show() {
        cout << name << " " << weight << "kg, is grapefruit.\n";
    }
};

class Lemon :virtual public Orange, virtual public Lime {
    //string name_Lemon;
    //double weight_Lemon;
public:
    Lemon(string n, double w) : Orange(n, w), Lime(n, w), Pomelo(n, w), Mandarin(n, w), Citron(n, w), Citrus(n, w){}
    void show() {
        cout << name << " " << weight << "kg, is lemon.\n";
    }
};

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();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值