Помощь в учёбе, очень быстро...
Работаем вместе до победы

Абстрактные методы и абстрактные классы

РефератПомощь в написанииУзнать стоимостьмоей работы

В методе Main () определены две ссылки, fig и tri. Первая имеет тип базового класса Figure и адресует вначале объект производного класса Rectangle, затем производного объект класса Triangle. Ссылка fig обеспечивает обращения к перегруженным методам print () производных классов Rectangle и Triangle. Ссылка tri может адресовать только объекты класса Triangle и способна обеспечить вызов метода… Читать ещё >

Абстрактные методы и абстрактные классы (реферат, курсовая, диплом, контрольная)

В ряде случаев класс создается только как базовый, и его автор не предполагает, что кто-то будет создавать объекты этого класса вне наследования. Например, объекты уже рассмотренного в примерах класса фигур с заданными габаритами вряд ли пригодны для метода, который вычисляет площадь или периметр фигуры. Эти характеристики нельзя определить, если о фигуре известны только ее габариты. Однако в базовом классе можно «запланировать» проведение этих вычислений в производных классах. Для этого в базовый класс добавляют так называемые абстрактные методы, и класс объявляют абстрактным. Абстрактные методы задают «прототипы» реальных методов, которые должны быть реализованы в классах, производных от абстрактного.

Абстрактный метод может быть объявлен только в абстрактном классе. В заголовке абстрактного метода указывается модификатор abstract. У абстрактного метода после скобки, ограничивающей спецификацию параметров, помещается символ «точка с запятой». У абстрактного метода не может быть тела в виде блока операторов в фигурных скобках. Абстрактный метод по умолчанию является виртуальным. Таким образом, добавлять модификатор virtual не требуется.

Чтобы класс был определен как абстрактный, в его заголовок помещают модификатор abstract. Создавать объекты абстрактных классов невозможно. Если в абстрактном классе объявлены несколько абстрактных методов, а производный класс содержит реализацию не всех из них, то производный класс в свою очередь становится абстрактным. В абстрактном классе могут быть определены любые не абстрактные члены (методы, поля, свойства и т. д.). Кроме того, класс может быть объявлен абстрактным даже в том случае, если в нем отсутствуют абстрактные члены.

Продемонстрируем особенности использования абстрактных классов и абстрактных методов на примере классов, производных от класса «фигура на плоскости». Превратим этот базовый класс в абстрактный, добавив в него абстрактный метод для вычисления площади фигуры. Метод вывода сведений об объекте класса также сделаем абстрактным. Для иллюстрации определим в этом же классе не виртуальный метод Сcompress), выполняющий сжатие (или увеличение) габаритных размеров фигуры в заданное число раз. Текст программы с таким классом:

// 1312.cs — абстрактные методы в абстрактном классе using System;

abstract class Figure // абстрактный базовый класс

{

protected double dx, dy; 11 размеры вдоль осей public abstract void print ();

public void compress (double r) { dx *= r; dy *= r; } abstract public double square ();

>

class Rectangle: Figure.

{

public Rectangle (double xi, double yi).

{ dx = xi; dy = yi; } public override void print ().

{

Console.Write («Площадь прямоугольника={02}. «, square ());

Console.WriteLine ('Ta6apnTbi: dx={0:f2}, dy={l:f2}", dx, dy);

}

public override double squareQ { return dx * dy; }.

}

class Triangle: Figure.

{

public Triangle (double xi, double yi).

{ dx = xi; dy = yi; } public override void print ().

{

Console.Write («Площадь треугольника={0:Т2}. «, squareQ);

Console.WriteLine («Габариты: dx={0:f2}, dy={l:f2}», dx, dy);

}

public override double squareQ { return dx * dy / 2; }.

}

class Program.

{

static void MainQ.

{

Figure fig = new Rectangle (3.0, 4.0); fig. printQ;

fig = new Triangle (5.0, 4.0); fig. printQ; fig. compress (2.0); fig. printQ;

Triangle tri = new Triangle (8.0, 4.0);

tri.printQ;

tri.compress (0.25);

tri.printQ;

} }

Результат выполнения программы:

Площадь прямоугольника=12,00. Габариты: dx=3,00, dy=4,00 Площадь треугольника=10,00. Габариты: dx=5,00, dy=4,00 Площадь треугольника=22,50. Габариты: dx=7,50, dy=6,00 Площадь треугольника=16,00. Габариты: dx=8,00, dy=4,00 Площадь треугольникам, 00. Габариты: dx=2,00, dy=l, 00.

В методе Main () определены две ссылки, fig и tri. Первая имеет тип базового класса Figure и адресует вначале объект производного класса Rectangle, затем производного объект класса Triangle. Ссылка fig обеспечивает обращения к перегруженным методам print () производных классов Rectangle и Triangle. Ссылка tri может адресовать только объекты класса Triangle и способна обеспечить вызов метода printQ только этого же производного класса. В то же время для этой ссылки (и для ссылки fig) доступен метод compress () базового класса, унаследованный производными классами. Результаты выполнения программы иллюстрируют сказанное.

Завершая рассмотрение наследования классов, повторим, что в производном классе метод по отношению к методу базового класса может быть новым, перегруженным, унаследованным, скрывающим (экранирующим) метод базового класса и реализующим виртуальный или абстрактный метод базового класса.

Показать весь текст
Заполнить форму текущей работой