C#——Ellipse(椭圆)类[继承Ellipse(椭圆)类重构Circle(圆)类]

问题描述

定义一个Circle类,其功能有:

1)两个double类型属性X和Y,可读写圆心坐标

2)一个double类型属性Radius,可读写圆的半径

3)一个构造方法,以指定的x,y,radius来构造

4)一个只读属性Area,获取圆面积

5)一个只读属性Perimeter,获取圆周长

6)一个方法bool Contains(double x, double y),如果指定的点(x, y)处于本圆内,返回true

7)一个方法bool Contains(Circle circle),如果指定的圆circle包含在本圆内,返回true

8)一个方法bool Extend(double range, out Circle newCircle),半径扩大(加上range),输出扩大后的newCircle,返回true。如果Radius+range为负,无法扩大,则输出原来的圆,且返回false。

在一个Main方法中对上述功能进行测试 

 

添加一个Ellipse(椭圆)类:

1)X, Y, MajorRadius, MinorRadius属性

2)至少两个Ellipse构造方法,一个调用另一个

3)只读属性Area

4)实例方法bool Contains(double x, double y)

5)实例方法string ToString()

6)让Circle类继承Ellipse类,将其中的重复代码删去

7)在MajorRadius, MinorRadius属性的set访问器中,对value进行检查,如果value<=0,抛出异常(throw new ArgumentException("主轴长度不能为负");),并保证MajorRadius>=MinorRadius 

在一个Main方法中对上述功能进行测试 

源代码 

using System;namespace HomeWork1
{//定义一个Circle类,其功能有class Circle{//-两个double类型属性X和Y,可读写圆心坐标public double X{set;get;}public double Y{set;get;}//-一个double类型属性Radius,可读写圆的半径public double Radius {set;get;}//-一个构造方法,以指定的x,y,radius来构造public Circle(double X, double Y, double Radius) {this.X = X;this.Y = Y;this.Radius = Radius;}//-一个只读属性Area,获取圆面积public double Area {get {return Radius * Radius * 3.1415926;}}//-一个只读属性Perimeter,获取圆周长public double Perimeter{get { return 2 * Radius * 3.1415926;}}//-如果指定的点(x, y)处于本圆内,返回truepublic bool Contains(double x, double y) {if ((x - X) * (x - X) + (y - Y)* (y - Y) < Radius * Radius) {return true;}return false;}//-如果指定的圆circle包含在本圆内,返回truepublic bool Contains(Circle circle) {if (Radius>circle.Radius && (Radius - circle.Radius) * (Radius - circle.Radius) > (circle.X - X) * (circle.X - X) + (circle.Y - Y) * (circle.Y - Y)){return true;}return false;}//-半径扩大(加上range),输出扩大后的newCircle,返回true。如果Radius+range为负,无法扩大,则输出原来的圆,且返回false。public bool Extend(double range, out Circle newCircle) {newCircle = this;if (newCircle.Radius + range > 0) {newCircle.Radius = newCircle.Radius + range;return true;}return false;}}class Program{static void Main(string[] args){Circle circle = new Circle(1,1,3);Console.WriteLine("面积:{0}\t周长:{1}",circle.Area, circle.Perimeter);Console.WriteLine("(2,2)在本圆内:{0}", circle.Contains(2,2));Console.WriteLine("Circle(1,1,1)在本圆内:{0}", circle.Contains(new Circle(1,1,1)));circle.Extend(2,out circle);Console.WriteLine("面积:{0}\t周长:{1}", circle.Area, circle.Perimeter);}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Homework4
{/*** 添加一个Ellipse(椭圆)类:* 1)X, Y, MajorRadius, MinorRadius属性* 2)至少两个Ellipse构造方法,一个调用另一个* 3)只读属性Area* 4)实例方法bool Contains(double x, double y)* 5)实例方法string ToString()* 6)让Circle类继承Ellipse类,将其中的重复代码删去* 7)在MajorRadius, MinorRadius属性的set访问器中,*    对value进行检查,如果value<=0,抛出异常(throw new ArgumentException("主轴长度不能为负");),*    并保证MajorRadius>=MinorRadius*/class Ellipse {//-两个double类型属性X和Y,可读写圆心坐标public double X{set;get;}public double Y{set;get;}private double majorRadius {set;get;}private double minorRadius{set;get;}public double MajorRadius {set {if (value < 0) {throw new ArgumentException("主轴长度不能为负");}majorRadius = value;}get {return majorRadius;}}public double MinorRadius{set{if (value > MajorRadius){throw new ArgumentException("主轴长度不能为负");}minorRadius = value;}get{return minorRadius;}}//一个只读属性Area,获取椭圆面积public double Area {get { return X * Y * Math.PI; }}public Ellipse():this(1,2) {}public Ellipse(double x,double y) { }//-如果指定的点(x, y)处于椭圆内,返回truepublic bool Contains(double x, double y) {if ((x - X) * (x - X) * MinorRadius * MinorRadius + (y - Y) * (y - Y) * MajorRadius * MajorRadius < MajorRadius * MajorRadius * MinorRadius * MinorRadius){return true;}return false;}public string ToString() { return "Ellipse{"+"X: " + X + " " +"Y: " + Y + " " +"MajorRadius: " + MajorRadius + " " +"MinorRadius: " + MinorRadius + " " +"}";}}class Circle:Ellipse{//-一个double类型属性Radius,可读写圆的半径public double Radius{set {MinorRadius = MajorRadius = value;}get { return MajorRadius; }}//-一个构造方法,以指定的x,y,radius来构造public Circle(double X, double Y, double Radius){this.X = X;this.Y = Y;this.Radius = Radius;}//-//-一个只读属性Perimeter,获取圆周长public double Perimeter{get{return 2 * Radius * Math.PI;}}//-如果指定的圆circle包含在本圆内,返回truepublic bool Contains(Circle circle){if (Radius > circle.Radius&& (Radius - circle.Radius) * (Radius - circle.Radius) > (circle.X - X) * (circle.X - X) + (circle.Y - Y) * (circle.Y - Y)){return true;}return false;}//-半径扩大(加上range),输出扩大后的newCircle,返回true。如果Radius+range为负,无法扩大,则输出原来的圆,且返回false。public bool Extend(double range, out Circle newCircle){newCircle = this;if (newCircle.Radius + range > 0){newCircle.Radius = newCircle.Radius + range;return true;}return false;}public string ToString(){return "Circle{" +"X: " + X + " " +"Y: " + Y + " " +"Radius: " + Radius + " " +"}";}}class Program{static void Main(string[] args){Circle circle = new Circle(1, 1, 3);Console.WriteLine("面积:{0}\t周长:{1}", circle.Area, circle.Perimeter);Console.WriteLine("(2,2)在本圆内:{0}", circle.Contains(2, 2));Console.WriteLine("Circle(1,1,1)在本圆内:{0}", circle.Contains(new Circle(1, 1, 1)));circle.Extend(2, out circle);Console.WriteLine(circle.ToString());Console.WriteLine("面积:{0}\t周长:{1}", circle.Area, circle.Perimeter);}}
}

运行结果

 

参考文章

https://blog.csdn.net/pengpengblog/article/details/53213454

https://shentuzhigang.blog.csdn.net/article/details/104880342 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部