C#——Ellipse(椭圆)类[继承Ellipse(椭圆)类重构Circle(圆)类]
問題描述
定義一個(gè)Circle類,其功能有:
1)兩個(gè)double類型屬性X和Y,可讀寫圓心坐標(biāo)
2)一個(gè)double類型屬性Radius,可讀寫圓的半徑
3)一個(gè)構(gòu)造方法,以指定的x,y,radius來構(gòu)造
4)一個(gè)只讀屬性Area,獲取圓面積
5)一個(gè)只讀屬性Perimeter,獲取圓周長(zhǎng)
6)一個(gè)方法bool?Contains(double?x,?double?y),如果指定的點(diǎn)(x,?y)處于本圓內(nèi),返回true
7)一個(gè)方法bool?Contains(Circle?circle),如果指定的圓circle包含在本圓內(nèi),返回true
8)一個(gè)方法bool?Extend(double?range,?out?Circle?newCircle),半徑擴(kuò)大(加上range),輸出擴(kuò)大后的newCircle,返回true。如果Radius+range為負(fù),無法擴(kuò)大,則輸出原來的圓,且返回false。
在一個(gè)Main方法中對(duì)上述功能進(jìn)行測(cè)試?
?
添加一個(gè)Ellipse(橢圓)類:
1)X, Y, MajorRadius, MinorRadius屬性
2)至少兩個(gè)Ellipse構(gòu)造方法,一個(gè)調(diào)用另一個(gè)
3)只讀屬性Area
4)實(shí)例方法bool Contains(double x, double y)
5)實(shí)例方法string ToString()
6)讓Circle類繼承Ellipse類,將其中的重復(fù)代碼刪去
7)在MajorRadius, MinorRadius屬性的set訪問器中,對(duì)value進(jìn)行檢查,如果value<=0,拋出異常(throw new ArgumentException("主軸長(zhǎng)度不能為負(fù)");),并保證MajorRadius>=MinorRadius?
在一個(gè)Main方法中對(duì)上述功能進(jìn)行測(cè)試?
源代碼?
using System;namespace HomeWork1 {//定義一個(gè)Circle類,其功能有class Circle{//-兩個(gè)double類型屬性X和Y,可讀寫圓心坐標(biāo)public double X{set;get;}public double Y{set;get;}//-一個(gè)double類型屬性Radius,可讀寫圓的半徑public double Radius {set;get;}//-一個(gè)構(gòu)造方法,以指定的x,y,radius來構(gòu)造public Circle(double X, double Y, double Radius) {this.X = X;this.Y = Y;this.Radius = Radius;}//-一個(gè)只讀屬性Area,獲取圓面積public double Area {get {return Radius * Radius * 3.1415926;}}//-一個(gè)只讀屬性Perimeter,獲取圓周長(zhǎng)public double Perimeter{get { return 2 * Radius * 3.1415926;}}//-如果指定的點(diǎn)(x, y)處于本圓內(nèi),返回truepublic bool Contains(double x, double y) {if ((x - X) * (x - X) + (y - Y)* (y - Y) < Radius * Radius) {return true;}return false;}//-如果指定的圓circle包含在本圓內(nèi),返回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;}//-半徑擴(kuò)大(加上range),輸出擴(kuò)大后的newCircle,返回true。如果Radius+range為負(fù),無法擴(kuò)大,則輸出原來的圓,且返回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周長(zhǎng):{1}",circle.Area, circle.Perimeter);Console.WriteLine("(2,2)在本圓內(nèi):{0}", circle.Contains(2,2));Console.WriteLine("Circle(1,1,1)在本圓內(nèi):{0}", circle.Contains(new Circle(1,1,1)));circle.Extend(2,out circle);Console.WriteLine("面積:{0}\t周長(zhǎng):{1}", circle.Area, circle.Perimeter);}} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Homework4 {/*** 添加一個(gè)Ellipse(橢圓)類:* 1)X, Y, MajorRadius, MinorRadius屬性* 2)至少兩個(gè)Ellipse構(gòu)造方法,一個(gè)調(diào)用另一個(gè)* 3)只讀屬性Area* 4)實(shí)例方法bool Contains(double x, double y)* 5)實(shí)例方法string ToString()* 6)讓Circle類繼承Ellipse類,將其中的重復(fù)代碼刪去* 7)在MajorRadius, MinorRadius屬性的set訪問器中,* 對(duì)value進(jìn)行檢查,如果value<=0,拋出異常(throw new ArgumentException("主軸長(zhǎng)度不能為負(fù)");),* 并保證MajorRadius>=MinorRadius*/class Ellipse {//-兩個(gè)double類型屬性X和Y,可讀寫圓心坐標(biāo)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("主軸長(zhǎng)度不能為負(fù)");}majorRadius = value;}get {return majorRadius;}}public double MinorRadius{set{if (value > MajorRadius){throw new ArgumentException("主軸長(zhǎng)度不能為負(fù)");}minorRadius = value;}get{return minorRadius;}}//一個(gè)只讀屬性Area,獲取橢圓面積public double Area {get { return X * Y * Math.PI; }}public Ellipse():this(1,2) {}public Ellipse(double x,double y) { }//-如果指定的點(diǎn)(x, y)處于橢圓內(nèi),返回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{//-一個(gè)double類型屬性Radius,可讀寫圓的半徑public double Radius{set {MinorRadius = MajorRadius = value;}get { return MajorRadius; }}//-一個(gè)構(gòu)造方法,以指定的x,y,radius來構(gòu)造public Circle(double X, double Y, double Radius){this.X = X;this.Y = Y;this.Radius = Radius;}//-//-一個(gè)只讀屬性Perimeter,獲取圓周長(zhǎng)public double Perimeter{get{return 2 * Radius * Math.PI;}}//-如果指定的圓circle包含在本圓內(nèi),返回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;}//-半徑擴(kuò)大(加上range),輸出擴(kuò)大后的newCircle,返回true。如果Radius+range為負(fù),無法擴(kuò)大,則輸出原來的圓,且返回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周長(zhǎng):{1}", circle.Area, circle.Perimeter);Console.WriteLine("(2,2)在本圓內(nèi):{0}", circle.Contains(2, 2));Console.WriteLine("Circle(1,1,1)在本圓內(nèi):{0}", circle.Contains(new Circle(1, 1, 1)));circle.Extend(2, out circle);Console.WriteLine(circle.ToString());Console.WriteLine("面積:{0}\t周長(zhǎng):{1}", circle.Area, circle.Perimeter);}} }運(yùn)行結(jié)果
?
參考文章
https://blog.csdn.net/pengpengblog/article/details/53213454
https://shentuzhigang.blog.csdn.net/article/details/104880342?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的C#——Ellipse(椭圆)类[继承Ellipse(椭圆)类重构Circle(圆)类]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue——props默认值为工厂函数时[
- 下一篇: C#——继承[模拟Server类]初始化