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 (' ');
}
}
Результат выполнения этой программы приведен ниже.
Поместить символы А-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. Ниже приведена общая форма такого вызова.
}
В исходном конструкторе сначала выполняется перегружаемый конструктор, список параметров которого соответствует критерию
// Продемонстрировать вызов конструктора с помощью ключевого слова 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) {
Console.WriteLine('В конструкторе XYCoord(obj)');
