c#继承方法重写练习题(2018/07/05)

1.根据代码写出输出结果
知识点:

  1. 子类在执行构造方法时,若没有显示调用父类的构造方法,系统会隐式调用父类的无参构造方法(没有无参构造的话,报错)
  2. 向上转型:父类引用指向子类对象,当子类对象中的方法没有覆写(用override标注方法)父类中的虚函数(virtual标注的方法),而是用new关键字标注,父类引用执行方法并不会执行子类中的同名方法,而是执行父类中的原方法。
using System;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            A a = new B();
            a.Fun();
        }
    }

    public abstract class A
    {
        public A()
        {
            Console.WriteLine('A');
        }

        public virtual void Fun()
        {
            Console.WriteLine("A.Fun()");
        }
    }
    class B : A
    {
        public B()
        {
            Console.WriteLine('B');
        }
        public new void Fun()
        {
            Console.WriteLine("B.Fun()");
        }
    }
}

输出结果:

A
B
A.Fun()


(2)

using System;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a = new A();
            a.Fun2(b);  //2 5
            b.Fun2(a);  //1 6
        }
    }

    public class A
    {
        public virtual void Fun1(int i)
        {
            Console.WriteLine(i);
        }
        public void Fun2(A a)
        {
            a.Fun1(1);
            Fun1(5);
        }
    }
    class B : A
    {
        public override void Fun1(int i)
        {
            base.Fun1(i + 1);
        }

    }
}


输出结果:

2
5
1
6


2.定义一个圆Circle类,重写ToString方法,返回圆的半径、周长、面积等信息

using System;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle circle = new Circle(2);
            Console.WriteLine(circle);
        }
    }

    class Circle
    {
        private float r;
        public Circle(float r)
        {
            this.r = r;
        }

        public float GetLength()
        {
            return (float)(2 * r * Math.PI);
        }
        public float GetArea()
        {
            return (float)(r * r * Math.PI);
        }
        public override string ToString()
        {
            return "半径:" + this.r +
                ",面积:" + GetArea()
                + ",周长:" + GetLength();
        }
    }

}



3.

  • 商品id 名字 数量 价格 * 1001 苹果 100 1 * 1002
    乐事薯片 20 2 * 简易版商品管理系统: * 提示:最多不超过5种商品(水果,厨具,饼干等等) *
    输入1,进行添加商品的操作; * 通过键盘输入每种商品的信息,并进行存储; 输入2,进入查询商品的操作(显示商品的基本信息); *
using System;
using System.Collections.Generic;

namespace cchoop
{
    class Program
    {
        static void Main(string[] args)
        {
            Store store = new Store();
            store.Menu();
        }
    }
    /// <summary>
    /// 约定好商品的Id
    /// </summary>
    public class GoodsType
    {
        public const string Fruit = "1001";
        public const string kitchenWare = "1002";
        public const string Cookies = "1003";
        public const string Shoes = "1004";
    }
    /// <summary>
    /// 商店
    /// </summary>
    class Store
    {
        //存储商品信息
        private Dictionary<string, Goods> goodsDit = new Dictionary<string, Goods>();

        public Store()
        {
            Fruit fruit = new Fruit(GoodsType.Fruit, "海南椰子", 1000, 2.9f);
            goodsDit.Add(GoodsType.Fruit, fruit);
            kitchenWare kitchenWare = new kitchenWare(GoodsType.kitchenWare, "关东菜刀", 200, 20);
            goodsDit.Add(GoodsType.kitchenWare, kitchenWare);
            Cookies cookies = new Cookies(GoodsType.Cookies, "锋味曲奇饼", 100, 99);
            goodsDit.Add(GoodsType.Cookies, cookies);
            Shoes shoes = new Shoes(GoodsType.Shoes, "adidas鞋", 100, 599);
            goodsDit.Add(GoodsType.Shoes, shoes);
        }
        public void Menu()
        {
            Console.WriteLine("==============欢迎来到CC商店=============");
            Console.WriteLine("商品Id\t\t商品名\t\t商品剩余数量\t\t商品价格");
            Console.WriteLine("-------------------------------------------------------------------");
            foreach (var item in goodsDit)
            {
                Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}元", item.Value.Id, item.Value.Name, item.Value.Num, item.Value.price);
            }
            Console.WriteLine("==========================================");
            Console.Write("输入1添加商品;输入2查询商品,输入3退出,请输入:");
            int op = 0;
            while (true)
            {
                string opStr = Console.ReadLine();
                try
                {
                    op = Int32.Parse(opStr);
                }
                catch (Exception e)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                if (op != 1 && op != 2 && op != 3)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                break;
            }
            switch (op)
            {
                case 1:
                    AddGoods();
                    break;
                case 2:
                    SerachGoodsInfo();
                    break;
                case 3:
                    Environment.Exit(0);
                    break;
            }
        }

        //添加商品信息
        private void AddGoods()
        {
            Console.WriteLine("请输入要添加商品的编号:");
            string idStr = null;
            while (true)
            {
                idStr = Console.ReadLine();
                if (idStr.Trim() != GoodsType.Fruit && idStr.Trim() != GoodsType.Cookies && idStr.Trim() != GoodsType.Shoes && idStr.Trim() != GoodsType.kitchenWare)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                break;
            }

            Console.WriteLine("请输入要添加的数量:");
            int numAdd = 0;
            while (true)
            {
                string numStr = Console.ReadLine();
                try
                {
                    numAdd = Int32.Parse(numStr);
                }
                catch (Exception e)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                if (numAdd < 0)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                break;
            }
            if (this.goodsDit.ContainsKey(idStr))
            {
                this.goodsDit[idStr].Num += numAdd;
            }

            Console.WriteLine("添加成功!\n按任意键返回主菜单:");
            Console.ReadKey();
            Console.Clear();   //清空控制台的内容
            this.Menu();
        }

        //查询商品信息
        private void SerachGoodsInfo()
        {
            Console.WriteLine("请输入要查询商品的编号:");
            string idStr = null;
            while (true)
            {
                idStr = Console.ReadLine();
                if (idStr.Trim() != GoodsType.Fruit && idStr.Trim() != GoodsType.Cookies && idStr.Trim() != GoodsType.Shoes && idStr.Trim() != GoodsType.kitchenWare)
                {
                    Console.WriteLine("输入无效,请重新输入:");
                    continue;
                }
                break;
            }

            switch (idStr)
            {
                case GoodsType.Fruit:
                    if (this.goodsDit.ContainsKey(GoodsType.Fruit))
                    {
                        Goods goods = goodsDit[GoodsType.Fruit];
                        Console.WriteLine("商品Id\t\t商品名\t\t商品剩余数量\t\t商品价格");
                        Console.WriteLine("-------------------------------------------------------------------");
                        Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}元", goods.Id, goods.Name, goods.Num, goods.price);
                    }
                    else
                    {
                        Console.WriteLine("商品不存在");
                    }
                    break;
                case GoodsType.kitchenWare:
                    if (this.goodsDit.ContainsKey(GoodsType.kitchenWare))
                    {
                        Goods goods = goodsDit[GoodsType.kitchenWare];
                        Console.WriteLine("商品Id\t\t商品名\t\t商品剩余数量\t\t商品价格");
                        Console.WriteLine("-------------------------------------------------------------------");
                        Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}元", goods.Id, goods.Name, goods.Num, goods.price);
                    }
                    else
                    {
                        Console.WriteLine("商品不存在");
                    }
                    break;
                case GoodsType.Cookies:
                    if (this.goodsDit.ContainsKey(GoodsType.Cookies))
                    {
                        Goods goods = goodsDit[GoodsType.Cookies];
                        Console.WriteLine("商品Id\t\t商品名\t\t商品剩余数量\t\t商品价格");
                        Console.WriteLine("-------------------------------------------------------------------");
                        Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}元", goods.Id, goods.Name, goods.Num, goods.price);
                    }
                    else
                    {
                        Console.WriteLine("商品不存在");
                    }
                    break;
                case GoodsType.Shoes:
                    if (this.goodsDit.ContainsKey(GoodsType.Shoes))
                    {
                        Goods goods = goodsDit[GoodsType.Shoes];
                        Console.WriteLine("商品Id\t\t商品名\t\t商品剩余数量\t\t商品价格");
                        Console.WriteLine("-------------------------------------------------------------------");
                        Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}元", goods.Id, goods.Name, goods.Num, goods.price);
                    }
                    else
                    {
                        Console.WriteLine("商品不存在");
                    }
                    break;
                default:
                    Console.WriteLine("商品不存在");
                    break;
            }
            Console.WriteLine("按任意键返回主菜单:");
            Console.ReadKey();
            Console.Clear();   //清空控制台的内容
            this.Menu();
        }

    }
    /// <summary>
    /// 货物类
    /// </summary>
    abstract class Goods
    {
        public string Id { get; protected set; }
        public string Name { get; set; }
        public int Num { get; set; }
        public float price { get; set; }
        public Goods() { }
        public Goods(string id, string name, int num, float price)
        {
            this.Id = id;
            this.Name = name;
            this.Num = num;
            this.price = price;
        }
    }

    /// <summary>
    /// 水果类
    /// </summary>
    class Fruit : Goods
    {
        public Fruit()
        {
            this.Id = GoodsType.Fruit;
        }
        public Fruit(string id, string name, int num, float price)
            : base(id, name, num, price)
        {

        }
    }
    /// <summary>
    /// 厨具类
    /// </summary>
    class kitchenWare : Goods
    {
        public kitchenWare()
        {
            this.Id = GoodsType.kitchenWare;
        }
        public kitchenWare(string id, string name, int num, float price)
            : base(id, name, num, price)
        {

        }
    }
    /// <summary>
    /// 饼干类
    /// </summary>
    class Cookies : Goods
    {
        public Cookies()
        {
            this.Id = GoodsType.Cookies;
        }
        public Cookies(string id, string name, int num, float price)
            : base(id, name, num, price)
        {

        }
    }
    /// <summary>
    /// 鞋子
    /// </summary>
    class Shoes : Goods
    {
        public Shoes()
        {
            this.Id = GoodsType.Shoes;
        }
        public Shoes(string id, string name, int num, float price)
            : base(id, name, num, price)
        {

        }
    }

}



猜你喜欢

转载自blog.csdn.net/qq_34937637/article/details/80931585