Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Перегрузка конструкторов
//продемонстрировать перегрузку конструктора. using System; class MyClass { public int x; public MyClass() { Console.WriteLine("В конструкторе MyClass()."); x = 0; } public MyClass(int i) { Console.WriteLine("В конструкторе MyClass(int)."); x = i; } public MyClass(double d) { Console.WriteLine("В конструкторе MyClass(double)."); x = (int)d; } public MyClass(int i, int j) { Console.WriteLine("В конструкторе MyClass(int i,int j)."); x = i * j; } } class OverloadConsDemo { static void Main() { MyClass t1 = new MyClass(); MyClass t2 = new MyClass(88); MyClass t3 = new MyClass(17.23); MyClass t4 = new MyClass(2, 4); Console.WriteLine("t1.x: {0}\nt2.x: {1}\nt3.x: {2}\nt3.x: {3}", t1.x, t2.x, t3.x, t4.x); } } Одна из самых распространенных причин для перегрузки конструкторов заключается в необходимости предоставить возможность одним объектам инициализировать другие. В качестве примера ниже приведен усовершенствованный вариант разработанного ранее класса Stack, позволяющий конструировать один стек из другого. // класс для хранения символов в стеке. using System; class Stack { //эти члены класса являются закрытыми char[] stck; //массив, содержащий стек int tos; //индекс вершины стека //сконструировать пустой обьект класса Stack по заданному размеру стека public Stack(int size) { stck = new char[size]; //распределить память для стека tos = 0; } //сконструировать обьект класса 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; } //поместить вимволы в стек. public void Push(char ch) { if (tos == stck.Length) { Console.WriteLine(" - Стек заполнен"); return; } stck[tos] = ch; tos++; } //извлечь символ из стека. public char Pop() { if (tos == 0) { Console.WriteLine(" - Стек пуст."); return (char)0; } tos--; return stck[tos]; } //возвратить значение true, если стек заполненж public bool IsFull() { return tos == stck.Length; } //возвратить значение true, если стек пуст. public bool IsEmpty() { return tos == 0; } //возвратить общую емкост стека. public int Capacity() { return stck.Length; } //возврать количество обьектов, находящихся в настоящий момент в стеке. public int GetNum() { return tos; } } //продемострировать применение класса Stack; class StackDemo { static void Main() { Stack stk1 = new Stack(10); char ch; int i; //поместить ряд символов в стек stk1. Console.WriteLine("Поместить символы A-J в стек stk1."); for (i = 0;!stk1.IsFull(); i++) stk1.Push((char)('A' + i)); //создать копию стека stck1 Stack stk2 = new Stack(stk1); //вывести содержимое стека stk1 Console.Write("Содержимое стека stk1: "); while (!stk1.IsEmpty()) { ch = stk1.Pop(); Console.Write(ch); } Console.WriteLine(); Console.Write("Содержимое стека stk2: "); while (!stk2.IsEmpty()) { ch = stk2.Pop(); Console.Write(ch); } Console.WriteLine("\n"); } } Date: 2015-09-02; view: 375; Нарушение авторских прав |