Студопедия

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

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Абстрактные классы






Абстрактные классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах.

Абстрактный класс задает набор методов, которые каждый из производных классов будет реализовывать по-своему.

Методы абстрактного класса могут иметь пустое тело (объявляются как abstract).

Абстрактный класс может содержать и полностью определенные методы.

Если в классе есть хотя бы один абстрактный метод, весь класс должен быть описан как abstract.

Если класс, производный от абстрактного, не переопределяет все абстрактные методы, он также должен описываться как абстрактный.

 


using System;

 

abstract class TwoDShape

{

double pri_width;

double pri_height;

string pri_name;

 

// Стандартный конструктор

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;

}

 

// Перегруженный конструктор

public TwoDShape(TwoDShape ob)

{

width = ob.width;

height = ob.height;

name = ob.name;

}

 

// Свойства

public double width

{

get { return pri_width; }

set { pri_width = value; }

}

 

public double height

{

get { return pri_height; }

set { pri_height = value; }

}

 

public string name

{

get { return pri_name; }

set { pri_name = value; }

}

 

public void showDim()

{

Console.WriteLine(" Width and height are " +

width + " and " + height);

}

 

// Абстрактный метод

public abstract double area();

}

 

// Производный класс Треугольник

class Triangle: TwoDShape

{

string style;

 

// Стандартный конструктор

public Triangle()

{

style = " null";

}

 

// Перегруженный конструктор

public Triangle(string s, double w, double h): base(w, h, " triangle")

{

style = s;

}

 

// Перегруженный конструктор

public Triangle(double x)

: base(x, " triangle")

{

style = " isosceles";

}

 

// Перегруженный конструктор

public Triangle(Triangle ob)

: base(ob)

{

style = ob.style;

}

 

// Переопределение метода

public override double area()

{

return width * height / 2;

}

 

public void showStyle()

{

Console.WriteLine(" Triangle is " + style);

}

}

 

// Производный класс Прямоугольник

class Rectangle: TwoDShape

{

// Перегруженный конструктор

public Rectangle(double w, double h)

: base(w, h, " rectangle") { }

 

// Перегруженный конструктор

public Rectangle(double x):

base(x, " rectangle") { }

 

// Перегруженный конструктор

public Rectangle(Rectangle ob): base(ob) { }

 

public bool isSquare()

{

if (width == height) return true;

return false;

}

 

// Переопределение метода

public override double area()

{

return width * height;

}

}

 

class AbsShape

{

public static void Main()

{

TwoDShape[] shapes = new TwoDShape[4];

 

shapes[0] = new Triangle(" right", 8.0, 12.0);

shapes[1] = new Rectangle(10);

shapes[2] = new Rectangle(10, 4);

shapes[3] = new Triangle(7.0);

 

for(int i = 0; i < shapes.Length; i++)

{

Console.WriteLine(" object is " + shapes[i].name);

Console.WriteLine(" Area is " + shapes[i].area());

 

Console.WriteLine();

}

}

}


 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.