Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Применение виртуальных методов
// Применить виртуальные методы и полиморфизм. using System; class TwoDShape { double pri_width; double pri_height; // Конструктор по умолчанию. public TwoDShape() { Width = Height = 0.0; name = "null"; } // Параметризированный конструктор. public TwoDShape(double w, double h, string n) { Width = w; Height = h; name = n; } // Сконструировать объект равной ширины и высоты. public TwoDShape(double x, string n) { Width = Height = x; name = n; } // Сконструировать копию объекта TwoDShape. public TwoDShape(TwoDShape ob) { Width = ob.Width; Height = ob.Height; name = ob.name; } // Свойства ширины и высоты объекта. public double Width { get { return pri_width; } set { pri_width = value < 0? -value: value; } } public double Height { get { return pri_height; } set { pri_height = value < 0? -value: value; } } public string name { get; set; } public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Height); } public virtual double Area() { Console.WriteLine("Метод Area() должен быть переопределен"); return 0.0; } } // Класс для треугольников, производный от класса TwoDShape. class Triangle: TwoDShape { string Style; // Конструктор, используемый по умолчанию. public Triangle() { Style = "null"; } // Конструктор для класса Triangle. public Triangle(string s, double w, double h): base(w, h, "треугольник") { Style = s; } // Сконструировать равнобедренный треугольник, public Triangle(double x) : base(x, "треугольник") { Style = "равнобедренный"; } // Сконструировать копию объекта типа Triangle. public Triangle(Triangle ob) : base(ob) { Style = ob.Style; } // Переопределить метод Area() для класса Triangle. public override double Area() { return Width * Height / 2; } // Показать тип треугольника. public void ShowStyle() { Console.WriteLine("Треугольник " + Style); } } // Класс для прямоугольников, производный от класса TwoDShape. class Rectangle: TwoDShape { // Конструктор для класса Rectangle. public Rectangle(double w, double h): base(w, h, "прямоугольник") { } // Сконструировать квадрат. public Rectangle(double x): base(x, "прямоугольник") { } // Сконструировать копию объекта типа Rectangle. public Rectangle(Rectangle ob): base(ob) { } // Возвратить логическое значение true, если // прямоугольник окажется квадратом. public bool IsSquare() { if (Width == Height) return true; return false; } // Переопределить метод Area() для класса Rectangle. public override double Area() { return Width * Height; } } class DynShapes { static void Main() { TwoDShape[] shapes = new TwoDShape[5]; shapes[0] = new Triangle("прямоугольный", 8.0, 12.0); shapes[1] = new Rectangle(10); shapes[2] = new Rectangle(10, 4); shapes[3] = new Triangle(7.0); shapes[4] = new TwoDShape(10, 20, "общая форма"); for (int i = 0; i < shapes.Length; i++) { Console.WriteLine("Объект — " + shapes[i].name); Console.WriteLine("Площадь равна " + shapes[i].Area()); Console.WriteLine(); } } } Объект — треугольник Площадь равна 48
Объект — прямоугольник Площадь равна 100
Объект — прямоугольник Площадь равна 40
Объект — треугольник Площадь равна 24.5
Объект — общая форма Метод Area() должен быть переопределен Площадь равна 0 У программы из рассматриваемого здесь примера имеется еще одна примечательная особенность. Обратите внимание на то, что в методе Main() двумерные формы объявляются в виде массива объектов типа TwoDShape, но элементам этого массива присваиваются ссылки на объекты классов Triangle, Rectangle и TwoDShape.
Date: 2015-09-02; view: 362; Нарушение авторских прав |