【 塔 · 第 三 条 约 定 】
编写一个多边形作为基类(成员:定点数)
抽象方法(子类实现):体积、边长
一)正三角形类:成员 边长
二) 长方形类:成员 长宽
在编写过程中着实遇到了超乎于我想象的困难。我所想实现的转化为编程语言却不是那么的容易,到最后实现起来马马虎虎,完全没有实现多态和封装,而且代码也不完美,完全是简单粗暴的小白代码。希望大家能在评论里指导我。
问题
- 构造函数方法和实例化没有弄清楚
- 如何将主函数中从键盘输入数值传入子类构造的函数中,并调用
- 如何实现对子类的封装,使即使对象多个代码也不会过于冗长和啰嗦,且添加和删除对象可以简单化只改动小部分代码。
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.
");
Console.WriteLine("Please enter its length:");
Duo triangle = new Triangle() { N = 3, Name = "Triangle", length = Convert.ToInt32(Console.ReadLine()) };
Text(triangle);
Console.WriteLine("
Please 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 ");
Duo retangle = new Rectangle() { N =4, Name = "Retangle", length = Convert.ToInt32(Console.ReadLine()), width = Convert.ToInt32(Console.ReadLine()) };
Text(retangle);
Console.WriteLine("
Please 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多,该如何改进。谢谢!