m0_61783583 2021-12-09 00:53 采纳率: 56.3%
浏览 53
已结题

控制台程序设计题设计一个控制台程序

在程序定义抽象基类Cicle,并在Circle类中定义数据成员半径r、圆心位置坐标p(x,y)(p(x,y)为另外一个Point类的对象)以及抽象方法GetArea()和GetVolume()方法。通过该Circle类派生出球体Sphere类和圆柱体Cylinder类以及圆锥体Cone类,在派生类中分别对计算面积方法GetArea()和体积的方法GetVolume()两个抽象方法进行了重写,并通过定义Showlnfo()方法显示基本信息。请通过生成对象的方式测试这个程序完成以下的要求:
要求:(1)通过生成派生类对象的方式,调用类的构造函数完成对象的初始化,具体数据可以由设计者给出.
(2)合理调用GetArea()和GetVolume()方法计算各个派生类对象的面积和体积,并且根据体积的大小排序后调用ShowInfo()方法依次显示输出体积和坐标位置信息。

  • 写回答

1条回答 默认 最新

  • 沝林 2021-12-09 12:50
    关注
    
    using System;
    using System.Linq;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                Circle sphere = new Sphere(2, new Point(1, 1));
                Circle cylinder = new Cylinder(2, new Point(3, 3), 3);
                Circle cone = new Cone(2, new Point(5, 5), 3, 3);
    
                Compute(new Circle[] { sphere, cylinder, cone });
    
                Console.ReadLine();
            }
    
            static void Compute(Circle[] circles)
            {
                // 计算
                foreach(var item in circles)
                {
                    item.GetArea();
                    item.GetVolume();
                }
                // 排序,这里偷了各懒,就没有写算法了
                var ordered = circles.OrderBy(t => t.Volumn);
                foreach (var item in ordered)
                {
                    item.ShowInfo();
                }
            }
        }
    
        class Sphere : Circle
        {
            public Sphere(double r, Point p) : base(r, p)
            {
            }
    
            public override double GetArea()
            {
                return 4 * Math.PI * R * R;
            }
    
            public override void GetVolume()
            {
                Volumn = 4 * Math.PI * R * R * R / 3;
            }
            
        }
    
        class Cylinder : Circle
        {
            public Cylinder(double r, Point p, double h) : base(r, p)
            {
                H = h;
            }
            public double H { get; set; }
            public override double GetArea()
            {
                return 2 * Math.PI * R * (R + H);
            }
    
            public override void GetVolume()
            {
                Volumn = Math.PI * R * R * H;
            }
        }
    
        class Cone : Circle
        {
            public Cone(double r, Point p, double l, double h): base(r, p)
            {
                L = l;
                H = h;
            }
            public double L { get; set; }
            public double H { get; set; }
    
            public override double GetArea()
            {
                return  Math.PI * R * R + Math.PI * R * L;
            }
    
            public override void GetVolume()
            {
                Volumn = Math.PI * R * R * H / 3;
            }
        }
    
        abstract class Circle
        {
            public Circle(double r, Point p)
            {
                R = r;
                P = p;
            }
            public double R { get; set; }
    
            public Point P { get; set; }
    
            public double Volumn { get; set; }
    
            public abstract double GetArea();
    
            public abstract void GetVolume();
    
            public void ShowInfo()
            {
                Console.WriteLine($"{this.GetType().Name}-坐标:({P.X},{P.Y}), 体积:{Volumn}");
            }
        }
    
        class Point
        {
            public Point(double x, double y)
            {
                X = x;
                Y = y;
            }
            public double X { get; set; }
    
            public double Y { get; set; }
        }
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?