zoukankan      html  css  js  c++  java
  • C#:继承多态的方法实现数的简单加减乘除运算

       // 定义一个抽象的父类
        abstract class Figure
        {
            //声明抽象方法:
            //父类中的所有家里人可以用的方法必须都应用到子类中
            abstract public object getValue();//或者用virtual但是后面必须声明主体部分{ return null; }
            abstract public Figure Add(Figure f1); //{ return null; }
            abstract public Figure Sub(Figure f1);
            abstract public Figure Mul(Figure f1);
            abstract public Figure Div(Figure f1);
        }
        // 实数子类
        class DoubleFigure : Figure
        {
            //声明一个double型字段来存放数据
            protected double _myDouble;
            //运行的时候调用实现初始化
            public DoubleFigure(double num1)
            {
                this._myDouble = num1;
            }
            // 重写父类中输出结果的方法
            public override object getValue()
            {
                return _myDouble;
            }
            //实数相加
            public override Figure Add(Figure f1)
            {
                double doublenum = (double)this.getValue() + (double)f1.getValue();
                //f1.getValue()实际执行的结果类型不由f1声明时的类型决定,而是由指向堆中的内容决定
                DoubleFigure df = new DoubleFigure(doublenum);
                return df;//这里返回值类型为什么不是Figure也可以
                //在堆中开辟的空间地址传给了父类中的变量------父类的变量指向子类中的实例
                //父类变量能传递给子类中变量是因为实际类型没有改变
            }
            //这里不能用运算符的重载:operator必须和public static一同使用,而override不能与static同用
            //public override Figure operator +(DoubleFigure f1)
            //{
            //    double doubleNum = (double)this.getValue() + (double)f1.getValue();
            //    DoubleFigure df = new DoubleFigure(doubleNum);
            //    return df;      
            //}
            // 实数相减
            public override Figure Sub(Figure f1)
            {
                double doubleNum = (double)this.getValue() - (double)f1.getValue();
                DoubleFigure df = new DoubleFigure(doubleNum);
                return df;
            }
            // 实数相乘
            public override Figure Mul(Figure f1)
            {
                double doubleNum = (double)this.getValue() * (double)f1.getValue();
                DoubleFigure df = new DoubleFigure(doubleNum);
                return df;
            }
            //实数相除
            public override Figure Div(Figure f1)
            {
                if ((double)f1.getValue()!=0)
                {
    double doubleNum = (double)this.getValue() / (double)f1.getValue();
                    DoubleFigure df = new DoubleFigure(doubleNum);   
                    return df;         
                }  
                else
                {
                    Console.WriteLine("除数不能为0!");
                    return new DoubleFigure(0);
                }
            }
            //隐式转换方法实现DoubleFigure类型的数隐式转换为int型
            public static  implicit operator DoubleFigure(int myInt1)
            {
                return new DoubleFigure(myInt1);
            }
           static void Main(string[] args)
            {
                //父类的变量指向子类的实例
                Figure f1 = new DoubleFigure(6);//整数实例
                Figure f2 = new DoubleFigure(1.2); //实数实例
                DoubleFigure f3 = (DoubleFigure)f1.Div(f2);
                Console.WriteLine(f3.getValue()); 
                Console.ReadKey();
            }
  • 相关阅读:
    UVa 1643 Angle and Squares
    UVa 1210 (高效算法设计) Sum of Consecutive Prime Numbers
    UVa 1213 (01背包变形) Sum of Different Primes
    UVa 1644 (筛素数 + 二分) Prime Gap
    UVa 10048 (Floyd变形) Audiophobia
    UVa 247 (传递闭包) Calling Circles
    UVa 808 (建坐标系、找规律) Bee Breeding
    UVa 1151 (枚举 + MST) Buy or Build
    UVa 1395 (最小生成树) Slim Span
    UVa 11040 (水题) Add bricks in the wall
  • 原文地址:https://www.cnblogs.com/fantasy2121/p/6281785.html
Copyright © 2011-2022 走看看