山科OJ:Problem C: Lemon

Problem C: Lemon

Time Limit: 1 Sec  Memory Limit: 2 MB
Submit: 135  Solved: 67
[Submit][Status]

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

append.cappend.cc,

 

主程序

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

AC程序如下:

#include<bits/stdc++.h>
using namespace std;
class Citrus{
	protected: 
	string Name;
	double weight;
	public:
		Citrus(string name_=0,double weight_=0)
			:Name(name_),weight(weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is citrus fruit."<<endl;
		}
};
class Mandarin:virtual public Citrus{
	public:
		Mandarin(string name_=0,double weight_=0)
			:Citrus(name_,weight_){} 
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is mandarin."<<endl;
		}		
};
 
class Pomelo:virtual public Citrus{
	public:
		Pomelo(string name_=0,double weight_=0)
			:Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is pomelo."<<endl;
		}
};
 
class Citron:virtual public Citrus{
	public:
		Citron(string name_=0,double weight_=0)
			:Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is citron."<<endl;
		}		
};
 
class Orange:virtual public Mandarin,virtual public Pomelo{
	public:
		Orange(string name_=0,double weight_=0)
			:Mandarin(name_,weight_),Pomelo(name_,weight_),Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is orange."<<endl;
		}		
}; 
 
class Lime:virtual public Pomelo,virtual public Citron{
	public:
		Lime(string name_=0,double weight_=0)
			:Pomelo(name_,weight_),Citron(name_,weight_),Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is lime."<<endl;
		}		
};
 
class Tangerine:virtual public Mandarin,virtual public Orange{
	public:
		Tangerine(string name_=0,double weight_=0)
			:Mandarin(name_,weight_),Orange(name_,weight_),Pomelo(name_,weight_),Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is tangerine."<<endl;
		}		
};
 
class Grapefruit:virtual public Pomelo,virtual public Orange{
	public:
		Grapefruit(string name_=0,double weight_=0)
			:Orange(name_,weight_),Pomelo(name_,weight_),Mandarin(name_,weight_),Citrus(name_,weight_){}
		void show()
		{
			cout<<Name<<" "<<weight<<"kg, is grapefruit."<<endl;
		}		
}; 
class Lemon:virtual public Orange,virtual public Lime{
    public:
        Lemon(string name_=0,double weight_=0)
		:Orange(name_,weight_),Lime(name_,weight_),Pomelo(name_,weight_),Mandarin(name_,weight_),Citron(name_,weight_),Citrus(name_,weight_){}
        void show()
        {
            cout<<Name<<" "<<weight<<"kg, is lemon."<<endl;
        }       
};

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jpgxep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值