解决方案 »

  1.   

    +运算符重载必须定义在Apple或者Water两个类之一中才行。
      

  2.   

    第一点,所谓+,无论重载与否,都是,1+1=2,类型都是数字,那么水果+水果=2个水果,类型一样
    第二点,从你的类型来看,你program类型里,又包含了2个类型,那么,对于强类型的C#,楼主是没有类型做到一致
    第三点,可封箱到program里,再进行加减
      

  3.   

    在   苏小喵  和  极品老土豆  的指导下,我把代码做了修改,初步实现题目要求。
    代码如下:
    namespace 书本例题
    {
        class Program
        {
            public class AppleWater  //苹果汁
            {
                public string name;
                public string colour;
                public string form;
                public string taste;
                public void show()   //显示
                {
                    Console.WriteLine("名称:{0}", name);
                    Console.WriteLine("颜色:{0}", colour);
                    Console.WriteLine("形状:{0}", form);
                    Console.WriteLine("味道:{0}", taste);
                    Console.WriteLine("********************");
                }
            }
            public class Apple    //苹果
            {
                public string name;
                public string colour;
                public string form;
                public string taste;
                public Apple(string name, string colour, string form, string taste)
                {
                    this.name = name;
                    this.colour = colour;
                    this.form = form;
                    this.taste = taste;
                }
                public Apple()
                {
                    this.name = "苹果";
                    this.colour = "红色";
                    this.form = "圆形";
                    this.taste = "酸甜";
                }
                public void show()   //显示
                {
                    Console.WriteLine("名称:{0}", name);
                    Console.WriteLine("颜色:{0}", colour);
                    Console.WriteLine("形状:{0}", form);
                    Console.WriteLine("味道:{0}", taste);
                    Console.WriteLine("********************");
                }
            }
            public class Water   //水
            {
                public string name;
                public string colour;
                public string form;
                public string taste;
                public Water(string name, string colour, string form, string taste)
                {
                    this.name = name;
                    this.colour = colour;
                    this.form = form;
                    this.taste = taste;
                }
                public Water()
                {
                    this.name = "水";
                    this.colour = "无色";
                    this.form = "无形";
                    this.taste = "无味";
                }
                public void show()   //显示
                {
                    Console.WriteLine("名称:{0}", name);
                    Console.WriteLine("颜色:{0}", colour);
                    Console.WriteLine("形状:{0}", form);
                    Console.WriteLine("味道:{0}", taste);
                    Console.WriteLine("********************");
                }
                public static AppleWater operator +(Apple app, Water wat)   //+运算符重载
                {                AppleWater appwat = new AppleWater();
                    if (app.name == "苹果" && wat.name == "水")
                    {
                        appwat.name = "苹果汁";
                    }
                    else
                    {
                        app.name = "匿名";
                    }
                    if (app.colour == "红色" || app.name == "青色" && wat.colour == "无色")
                    {
                        appwat.colour = "橙色";
                    }
                    else
                    {
                        appwat.colour = "匿色";
                    }
                    if (app.form == "圆形" && wat.form == "无形")
                    {
                        appwat.form = "无形";
                    }
                    else
                    {
                        appwat.form = "匿形";
                    }
                    if (app.taste == "酸甜" && wat.taste == "无味")
                    {
                        appwat.taste = "酸甜可口";
                    }
                    else
                    {
                        appwat.taste = "匿味";
                    }
                    return appwat;
                }        }        static void Main(string[] args)
            {
                Apple app = new Apple();
                app.show();
                Water wat = new Water();
                wat.show();
                AppleWater appwat = new AppleWater();
                appwat = app + wat;  //调用+运算符重载
                appwat.show();
              
                Console.ReadKey();
            }
        }
    }
    运行结果:
    名称:苹果
    颜色:红色
    形状:圆形
    味道:酸甜
    "********************"
    运行结果:
    名称:水
    颜色:无色
    形状:无形
    味道:无味
    "********************"
    运行结果:
    名称:苹果汁
    颜色:橙色
    形状:无形
    味道:酸甜可口
    "********************"
      

  4.   

    感谢信
    ---------------
    感谢 苏小喵  和  极品老土豆 两位大侠!另:1、这个程序代码一定还可以再简化,不知如何优化?
            2、封箱在一个program里,进行加减。这句话,我不懂,该怎么理解?