【 塔 · 第 三 条 约 定 】

【 塔 · 第 三 条 约 定 】

编写一个多边形作为基类(成员:定点数)

抽象方法(子类实现):体积、边长

一)正三角形类:成员 边长

二) 长方形类:成员 长宽

​ 在编写过程中着实遇到了超乎于我想象的困难。我所想实现的转化为编程语言却不是那么的容易,到最后实现起来马马虎虎,完全没有实现多态和封装,而且代码也不完美,完全是简单粗暴的小白代码。希望大家能在评论里指导我。

问题

  • 构造函数方法和实例化没有弄清楚
  • 如何将主函数中从键盘输入数值传入子类构造的函数中,并调用
  • 如何实现对子类的封装,使即使对象多个代码也不会过于冗长和啰嗦,且添加和删除对象可以简单化只改动小部分代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 约定3
{
    abstract class Duo//抽象类
    {

        public int N { get; set; }
        public string Name { get; set; }
        public double area;
        public abstract void Area();
        public abstract double getS();
    }
    class Triangle : Duo//三角形
    {
        public double length { get; set; }//读入边长
        public override double getS()//计算面积
        {
            return length * length * Math.Sqrt(3) * 0.25;
        }

        public override void Area()//对象面积,输出
        {
            Console.WriteLine("Triangle's area is {0}.", getS ());
        }
    }
    class Rectangle : Duo//长方形
    {
        public double length { get; set; }//读入长
        public double width { get; set; }//读入宽
        public override double getS()//计算面积
        {
            return length * width;
        }

        public override void Area()//对象面积,输出
        {
            Console.WriteLine("Rectangle's area is {0}.", getS ());
        }

    }
    class Program
    {
     
        static void Text(Duo duo)//封装,共同的特点
        {
            Console.WriteLine(duo.Name +  " have " + duo.N + " apexes.");
            duo.Area();
        }
        static void Main(string[] args)
        {;
            Console.WriteLine("Please enter a number of apexes:");
            int N = Convert.ToInt32(Console.ReadLine());//由输入的定点数决定对象,但是不封闭,若是对象数过多,则Boom!此处没有想出改善的办法
            while (N == 3 || N == 4)
            {
                if (N == 3)
                {
                    Console.WriteLine("the duobianxing is Triangle.\n");
                    Console.WriteLine("Please enter its length:");
                    Duo triangle = new Triangle() { N = 3, Name = "Triangle", length = Convert.ToInt32(Console.ReadLine()) };
                    Text(triangle);
                    Console.WriteLine("\nPlease enter a number of apexes and its length:");
                    N = Convert.ToInt32(Console.ReadLine());
                }
                else if (N == 4)
                {
                    Console.WriteLine("the duobianxing is Rectangle.");
                    Console.WriteLine("Please enter its length and width:");
                    Duo retangle = new Rectangle() { N =4, Name = "Retangle", length = Convert.ToInt32(Console.ReadLine()), width = Convert.ToInt32(Console.ReadLine()) };
                   
                    Text(retangle);
                    Console.WriteLine("\nPlease enter a number of apexes and its length:");
                    N = Convert.ToInt32(Console.ReadLine());
                }
                else Console.WriteLine("The class is developing.So you can't see it now.GoodBey.");
            }
            Console.ReadLine();
    }
  }
}

此段代码暂时只提供三角形和长方形这两个多边形类的对象,希望大神告知如若对象N多,该如何改进。谢谢!

posted @ 2017-02-10 22:12  陈阿锦  阅读(91)  评论(4编辑  收藏  举报