Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию