现开发一款画图形的软件,包括圆形、长方形、正方形、三角形,每个图形都有Display显示函数,Area计算面积函数,Length计算周长函数,都有共同的属性x,y。
请分别用虚函数、抽象类、接口三种方法来实现上述题目要求。父类名Shape
测试过的,没问题可以采纳吗~谢谢
using System;
namespace Shape
{
#region 虚方法
/*
public class Shape
{
public double x { get; set; }
public double y { get; set; }
public virtual double Area() { throw new Exception("未实现"); }
public virtual double Length() { throw new Exception("未实现"); }
public virtual void Display () { throw new Exception("未实现"); }
}
public class Circle : Shape
{
public override double Area() { return Math.Round(Math.PI * Math.Pow(x, 2), 4); }
public override double Length() { return Math.Round(2 * x * Math.PI, 4); }
public override void Display() { Console.WriteLine("半径:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Rectangle : Shape
{
public override double Area() { return x * y; }
public override double Length() { return (x + y) * 2; }
public override void Display() { Console.WriteLine("x:" + x + " y:" + y + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Square : Shape
{
public override double Area() { return x * y; }
public override double Length() { return (x + y) * 2; }
public override void Display() { Console.WriteLine("x:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Triangle : Shape
{
public double z { get; set; }
public Triangle(double x, double y, double z)
{
if (x + y > z && x + z > y && y + z > x)
{
this.x = x; this.y = y; this.z = z;
}
else throw new Exception(x + "," + y + "," + z + "无法构成三角形!");
}
public override double Area()
{
double p = (x + y + z) / 2;
return Math.Round(Math.Sqrt((p * (p - x) * (p - y) * (p - z))), 4);//保留4位小数,保留位数改这里
}
public override double Length() { return x + y + z; }
public override void Display() { Console.WriteLine("x:" + x + " y:" + y + " z:" + z + " 面积:" + Area() + " 周长:" + Length()); }
}*/
#endregion
#region 抽象类
/*
public abstract class Shape
{
public double x { get; set; }
public double y { get; set; }
public abstract double Area();
public abstract double Length();
public abstract void Display();
}
public class Circle : Shape
{
public override double Area() { return Math.Round(Math.PI * Math.Pow(x, 2), 4); }
public override double Length() { return Math.Round(2 * x * Math.PI, 4); }
public override void Display() { Console.WriteLine("半径:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Rectangle : Shape
{
public override double Area() { return x * y; }
public override double Length() { return (x + y) * 2; }
public override void Display() { Console.WriteLine("x:" + x + " y:" + y + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Square : Shape
{
public override double Area() { return x * y; }
public override double Length() { return (x + y) * 2; }
public override void Display() { Console.WriteLine("x:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Triangle : Shape
{
public double z { get; set; }
public Triangle(double x, double y, double z)
{
if (x + y > z && x + z > y && y + z > x)
{
this.x = x; this.y = y; this.z = z;
}
else throw new Exception(x + "," + y + "," + z + "无法构成三角形!");
}
public override double Area()
{
double p = (x + y + z) / 2;
return Math.Round(Math.Sqrt((p * (p - x) * (p - y) * (p - z))), 4);//保留4位小数,保留位数改这里
}
public override double Length() { return x + y + z; }
public override void Display() { Console.WriteLine("x:" + x + " y:" + y + " z:" + z + " 面积:" + Area() + " 周长:" + Length()); }
}*/
#endregion
#region 接口
public interface Shape
{
double x { get; set; }
double y { get; set; }
double Area();
double Length();
void Display();
}
public class Circle : Shape
{
public double x { get; set; }
public double y { get; set; }
public double Area() { return Math.Round(Math.PI * Math.Pow(x, 2), 4); }
public double Length() { return Math.Round(2 * x * Math.PI, 4); }
public void Display() { Console.WriteLine("半径:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Rectangle : Shape
{
public double x { get; set; }
public double y { get; set; }
public double Area() { return x * y; }
public double Length() { return (x + y) * 2; }
public void Display() { Console.WriteLine("x:" + x + " y:" + y + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Square : Shape
{
public double x { get; set; }
public double y { get; set; }
public double Area() { return x * y; }
public double Length() { return (x + y) * 2; }
public void Display() { Console.WriteLine("x:" + x + " 面积:" + Area() + " 周长:" + Length()); }
}
public class Triangle : Shape
{
public double x { get; set; }
public double y { get; set; }
public double z { get; set; }
public Triangle(double x, double y, double z)
{
if (x + y > z && x + z > y && y + z > x)
{
this.x = x; this.y = y; this.z = z;
}
else throw new Exception(x + "," + y + "," + z + "无法构成三角形!");
}
public double Area()
{
double p = (x + y + z) / 2;
return Math.Round(Math.Sqrt((p * (p - x) * (p - y) * (p - z))), 4);//保留4位小数,保留位数改这里
}
public double Length() { return x + y + z; }
public void Display() { Console.WriteLine("x:" + x + " y:" + y + " z:" + z + " 面积:" + Area() + " 周长:" + Length()); }
}
#endregion
class Program
{
static void Main(string[] args)
{
new Circle { x = 5 }.Display();
new Rectangle { x = 4, y = 5 }.Display();
new Square { x = 5,y= 5 }.Display();
new Triangle(3, 4, 5).Display();
Console.ReadKey();
}
}
}
可以参考这篇文章
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632