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)處於本圓內,返回true
        public bool Contains(double x, double y) {
            if ((x - X) * (x - X) + (y - Y)* (y - Y) < Radius * Radius) {
                return true;
            }
            return false;
        }
        //-如果指定的圓circle包含在本圓內,返回true
        public 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)處於橢圓內,返回true
        public 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包含在本圓內,返回true
        public 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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章