Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию