C#程序设计之抽象类、多态和接口

C#程序设计之抽象类、多态和接口

题1

题目描述
定义一个抽象类CShape,包括抽象方法Area()(用来计算面积)和SetData()(用来实现输入现状大小)然后派生出三角形类CTriangle、矩形类CRect、圆形类CCircle,分别实现抽象方法Area()和SetData()。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写一个完整的程序。

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Example_AbstrcatClass
{
    public abstract class Shape
    {
        public abstract double Area();
        public abstract void SetData();

    }
    public class Trianle : Shape
    {
        double dblEdge1, dblEdge2, dblEdge3;
        public Trianle(double e1, double e2, double e3)
        {
            dblEdge1 = e1;
            dblEdge2 = e2;
            dblEdge3 = e3;
        }
        public override double Area()
        {
            double p = (this.dblEdge1 + this.dblEdge2 + this.dblEdge3) / 2.0;
            double area = System.Math.Sqrt(p * (p - this.dblEdge1) * (p - this.dblEdge2) * (p - this.dblEdge3));
            return area;

        }
        public override void SetData()
        {
            Console.WriteLine("The shape is a Triangle");
        }
    }
    public class Rect : Shape
    {
        double dblWidth, dblHeight;
        public Rect(double wid, double hei)
        {
            dblWidth = wid;
            dblHeight = hei;
        }
        public override double Area()
        {
            double area = dblWidth * dblHeight;
            return area;
        }
        public override void SetData()
        {
            Console.WriteLine("The shape is a Rect");
        }
    }
    public class Circle : Shape
    {
        double dblRadius;
        public Circle(double r)
        {
            dblRadius = r;
        }
        public override double Area()
        {
            double area = Math.PI * dblRadius * dblRadius;
            return area;
        }
        public override void SetData()
        {
            Console.WriteLine("The shape is a Circle");
        }
    }
    class Area
    {
        static void Main(string[] args)
        {
            Trianle tri = new Trianle(3, 4, 5);
            tri.SetData();
            Console.WriteLine("三角形的面积为:{0}", tri.Area());

            Rect rect = new Rect(3, 5);
            rect.SetData();
            Console.WriteLine("矩形的面积为:{0}", rect.Area());

            Circle cir = new Circle(10);
            cir.SetData();
            Console.WriteLine("圆形的面积为:{0}", cir.Area());
            Console.Write("\n");

            double dblArea = 0.0;
            dblArea = tri.Area() + rect.Area() + cir.Area();
            Console.WriteLine("总的面积为:{0}", dblArea);
            Console.Write("\n");

            //抽象类的多态
            double dblArea1 = 0.0;
            Shape shape;
            shape = new Trianle(6, 8, 10);
            shape.SetData();
            Console.WriteLine("三角形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();

            shape = new Rect(4, 5);
            shape.SetData();
            Console.WriteLine("矩形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();

            shape = new Circle(12);
            shape.SetData();
            Console.WriteLine("圆形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();
            Console.Write("\n");

            Console.WriteLine("总的面积为:{0}", dblArea1);
            Console.Read();
        }
    }
}

运行结果
在这里插入图片描述

题2

题目描述
定义一个接口Ishape,其中包含抽象方法Area()(用来计算面积)和SetData()(用来实现输出形状大小)。然后派生出三角形类CTriangle、矩形类CRect、圆形类CCircle,分别实现抽象方法Area()和SetData()。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写一个完整的程序。

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IShape
{
    public interface IShape
    {
        double Area();
        void SetData();
    }
    public class Trianle : IShape
    {
        double dblEdge1, dblEdge2, dblEdge3;
        public Trianle(double e1, double e2, double e3)
        {
            dblEdge1 = e1;
            dblEdge2 = e2;
            dblEdge3 = e3;
        }
        public double Area()
        {
            double p = (this.dblEdge1 + this.dblEdge2 + this.dblEdge3) / 2.0;
            double area = System.Math.Sqrt(p * (p - this.dblEdge1) * (p - this.dblEdge2) * (p - this.dblEdge3));
            return area;

        }
        public void SetData()
        {
            Console.WriteLine("The shape is a Triangle");
        }
    }
    public class Rect : IShape
    {
        double dblWidth, dblHeight;
        public Rect(double wid, double hei)
        {
            dblWidth = wid;
            dblHeight = hei;
        }
        public double Area()
        {
            double area = dblWidth * dblHeight;
            return area;
        }
        public void SetData()
        {
            Console.WriteLine("The shape is a Rect");
        }
    }
    public class Circle : IShape
    {
        double dblRadius;
        public Circle(double r)
        {
            dblRadius = r;
        }
        public double Area()
        {
            double area = Math.PI * dblRadius * dblRadius;
            return area;
        }
        public void SetData()
        {
            Console.WriteLine("The shape is a Circle");
        }
    }
    class Area
    {
        static void Main(string[] args)
        {
            Trianle tri = new Trianle(3, 4, 5);
            tri.SetData();
            Console.WriteLine("三角形的面积为:{0}", tri.Area());

            Rect rect = new Rect(3, 5);
            rect.SetData();
            Console.WriteLine("矩形的面积为:{0}", rect.Area());

            Circle cir = new Circle(10);
            cir.SetData();
            Console.WriteLine("圆形的面积为:{0}", cir.Area());
            Console.Write("\n");

            double dblArea = 0.0;
            dblArea = tri.Area() + rect.Area() + cir.Area();
            Console.WriteLine("总的面积为:{0}", dblArea);
            Console.Write("\n");

            //接口多态
            double dblArea1 = 0.0;
            IShape shape;
            shape = new Trianle(6, 8, 10);
            shape.SetData();
            Console.WriteLine("三角形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();

            shape = new Rect(6, 10);
            shape.SetData();
            Console.WriteLine("矩形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();

            shape = new Circle(5);
            shape.SetData();
            Console.WriteLine("圆形的面积为:{0}", shape.Area());
            dblArea1 += shape.Area();
            Console.Write("\n");

            Console.WriteLine("总的面积为:{0}", dblArea1);
            Console.Read();


        }
    }
}

运行结果
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值