Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб_14.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
204.8 Кб
Скачать

Наследование конструкторов

В иерархии классов и базовые, и производные классы могут иметь собственные конструкторы. При этом конструктор базового класса создает часть объекта, соответствующую базовому классу, а конструктор производного класса – часть объекта, соответствующую производному классу. Так как базовый класс не имеет доступа к элементам производного класса, то их конструкторы должны быть раздельными.

Упражнение 3. Добавить конструктор в производный класс DemoLine (см. упражнение 2).

class DemoPoint

{ protected int x;

protected int y;

public void Show()

{ Console.WriteLine("({0}, {1})", x, y); }}

class DemoLine : DemoPoint

{ public int xEnd;

public int yEnd;

new public void Show()

{ Console.WriteLine("({0}, {1}) - ({2}, {3})", x, y, xEnd, yEnd); }

public DemoLine(int x1, int y1, int x2, int y2) // конструктор производного класса

{ x = x1; y = y1; xEnd = x2; yEnd = y2; }}

class Program

{ static void Main()

{ DemoPoint point = new DemoPoint(); //вызов конструктора по умолчанию

point.Show();

DemoLine line = new DemoLine(2, 2, 10, 10); // вызывается собственный конструктор

line.Show(); }}

В данном случае конструктор определяется только в производном классе, поэтому часть объекта, соответствующая базовому классу, создается автоматически с помощью конструктора по умолчанию, а часть объекта, соответствующая производному классу, создается собственным конструктором.

Если же конструкторы определены и в базовом, и в производном классе, то процесс создания объектов несколько усложняется, т.к. должны выполниться конструкторы обоих классов. В этом случае используется ключевое слово base, которое имеет два назначения:

1) Позволяет вызвать конструктор базового класса ():

конструктор_производного_класса (список_параметров) : base (список_аргументов)

// параметры конструктору базового класса передаются с помощью элемента список_аргументов

{ // тело конструктора }

Упражнение 4. Вызов конструктора базового класса.

class DemoPoint

{ protected int x;

protected int y;

public void Show()

{ Console.WriteLine("({0}, {1})", x, y); }

public DemoPoint (int x, int y) // конструктор базового класса

{ this.x = x; this.y = y; }}

class DemoLine : DemoPoint

{ public int xEnd;

public int yEnd;

new public void Show()

{ Console.WriteLine("({0},{1})-({2},{3})",x,y,xEnd,yEnd); }

public DemoLine(int x1, int y1, int x2, int y2) : base(x1, y1) // конструктор производного класса

{ xEnd = x2; yEnd = y2; }}

class Program

{ static void Main()

{ DemoPoint point= new DemoPoint(5, 5); point.Show();

DemoLine line=new DemoLine(2,2,10,10); line.Show();}}

Упражнение 5. Вызов конструкторов классов.

С помощью ключевого слова base можно вызвать конструктор любой формы, определенный в базовом классе. Выполнится тот конструктор, параметры которого будут соответствовать переданным при вызове аргументам.

class DemoPoint

{ protected int x;

protected int y;

public void Show()

{ Console.WriteLine("({0}, {1})", x, y); }

public DemoPoint () //конструктор базового класса по умолчанию

{ this.x = 1; this.y = 1; }

public DemoPoint(int x, int y) // конструктор базового класса с параметрами

{ this.x = x; this.y = y; }}

class DemoLine : DemoPoint

{ public int xEnd;

public int yEnd;

new public void Show()

{ Console.WriteLine("({0},{1})-({2},{3})",x,y,xEnd,yEnd); }

public DemoLine() // конструктор производного класса по умолчанию

{ xEnd = 100; yEnd = 100; }

public DemoLine(int x2, int y2) // конструктор производного класса с двумя параметрами

{ xEnd = x2; yEnd = y2; }

// конструктор производного класса с четырьмя параметрами

public DemoLine(int x1, int y1, int x2, int y2) : base(x1, y1)

{ xEnd = x2; yEnd = y2; }}

class Program

{ static void Main()

{ DemoPoint point1= new DemoPoint(); // вызов конструктора по умолчанию

DemoPoint point2 = new DemoPoint(5, 5); //вызов конструктора с параметрами

point1.Show();

point2.Show();

DemoLine line1 =new DemoLine(); // вызов конструктора по умолчанию

DemoLine line2 = new DemoLine(4, 4); //вызов конструктора с двумя параметрами

// вызов конструктора с четырьмя параметрами

DemoLine line3 = new DemoLine(2, 2, 10, 10);

line1.Show(); line2.Show(); line3.Show(); }}

Задание. Объясните, как при вызове конструкторе производного класса инициируется вызов конструктора базового класса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]