Console.WriteLine("Поместить символы А-J в стек stkl."); for(i=0; !stkl.IsFull(); i++)

stkl.Push((char) ('A' + i));

// Создать копию стека stckl.

Stack stk2 = new Stack(stkl);

// Вывести содержимое стека stkl.

Console.Write("Содержимое стека stkl: "); while ( !stkl.IsEmpty()    )    {

ch = stkl.Pop ();

Console.Write(ch);

}

Console.WriteLine ();

Console.Write("Содержимое стека stk2: "); while ( !stk2.IsEmpty() )    {

ch = stk2.Pop ();

Console.Write(ch);

}

Console.WriteLine ("\n");

}

}

Результат выполнения этой программы приведен ниже.

Поместить символы А-J в стек stkl.

Содержимое стека stkl: JIHGFEDCBA Содержимое стека stk2: JIHGFEDCBA

В классеStackDemoсначала конструируется первый стек(stkl),заполняемый символами. Затем этот стек используется, для конструирования второго стека(stk2).Это приводит к выполнению следующего конструктора классаStack.

// Сконструировать объект класса Stack из существующего стека, public Stack(Stack ob) {

// Распределить память для стека, stck = new char[ob.stck.Length];

// Скопировать элементы в новый стек, for (int i=0; i < ob.tos; i++) stck[i] = ob.stck[i];

// Установить переменйую tos для нового стека, tos = ob.tos;

}

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

Вызов перегружаемого конструктора с помощью ключевого слова this

Когда приходится работать с перегружаемыми конструкторами, то иногда очень полезно предоставить возможность одному конструктору вызывать другой. В C# это дается с помощью ключевого слова this. Ниже приведена общая форма такого вызова.

имя_конструктора{список_параметров1) :this (список_параметров2) {

II... Тело конструктора, которое может быть пустым.

}

В исходном конструкторе сначала выполняется перегружаемый конструктор, список параметров которого соответствует критериюсписок_параметров2, азатем все остальные операторы, если таковые имеются в исходном конструкторе. Ниже приведен соответствующий пример.

// Продемонстрировать вызов конструктора с помощью ключевого слова this.

using System;

class XYCoord { public int x, y;

public XYCoord()    :    this(0, 0)    {

Console.WriteLine("В конструкторе XYCoord()");

}

public XYCoord(XYCoord obj)    :    this(obj.x, obj.y) {

Перейти на страницу:

Похожие книги