Студопедия

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

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






ПРИМЕР 7. Перегрузка конструктора класса Queue






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

Последовательность действий

1. Создайте новый файл QDemo2.java и скопируйте в него код класса Queue, созданный в примере №6.

2. Добавьте сначала в этот класс приведенный ниже конструктор, который будет строить одну очередь на основании другой.

// Конструктор, строящий один объект типа Queue на основании другого.

Queue(Queue ob) {

putloc = ob.putloc;

getloc = ob.getloc;

q = new char[ob.q.length];

// копировать элементы очереди

for(int i=getloc+l; i < = putloc; i++)

q [i] = ob.q [i];

}

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

3. Добавьте в данный класс конструктор, инициализирующий очередь данными из символьного массива, как показано ниже.

// Конструирование и инициализация объекта типа Queue.

Queue (char а []) {

putloc = 0;

getloc = 0;

q = new char[a.length+1];

for(int i = 0; i < a.length; i++) put(a[i]);

}

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

4. Ниже приведен весь код видоизмененного класса Queue, а также код класса QDemo2, демонстрирующего организацию очереди для хранения символов и обращение с ней.

// Класс, реализующий очередь для хранения символов,

class Queue {

private char q[]; // Массив для хранения элементов очереди,

private int putloc, getloc; // Индексы размещения и извлечения

// элементов очереди.

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

Queue(int size) {

q = new char[size+1]; 11 выделить память для очереди

putloc = getloc = 0;

}

// сконструировать очередь из существующего объекта типа Queue

Queue(Queue ob) {

putloc = ob.putloc;

getloc = ob.getloc;

q = new char[ob.q.length];

// копировать элементы в очередь

for(int i=getloc+l; i < = putloc; i++)

q[i] = ob.q[i];

}

// сконструировать очередь из массива исходных значений

Queue (char а []) {

putloc = 0;

getloc = 0;

q = new char[a.length+1];

for(int 1=0; 1 < a.length; i++) put(a[i]);

}

// поместить символ в очередь

void put(char ch) {

if(putloc==q.length-1) {

System.out.println(" - Queue is full.");

return;

}

putloc++;

q[putloc] = ch;

}

// извлечь символ из очереди

char get() {

if(getloc == putloc) {

System.out.println(" - Queue is empty.");

return (char) 0;

}

getloc++;

return q[getloc];

}

}

// продемонстрировать класс Queue в действии

class QDemo2 {

public static void main(String args[]) {

// построить пустую очередь для хранения 10 элементов

Queue ql = new Queue(10);

char name[] = {'Т', 'o', 'm'};

// построить очередь из массива

Queue q2 = new Queue(name);

char ch;

int i;

// поместить ряд символов в очередь ql

for(i=0; i < 10; i++)

ql.put{(char) ('A' + i));

// построить одну очередь из другой очереди

Queue q3 = new Queue(ql);

// показать очереди

System.out.print(" Contents of ql: ");

for(i=0; i < 10; i++) {

ch = ql.get ();

System.out.print(ch);

}

System.out.println(" \n");

System.out.print(" Contents of q2: ");

for(i=0; i < 3; i++) {

ch = q2.get();

System.out.print(ch);

}

System.out.println(" \n");

System.out.print(" Contents of q3: ");

for(i=0; i < 10; i++) {

ch = qS.get 0;

System.out.print(ch);

}

}

}

Результат выполнения данной программы выглядит следующим образом:

Contents of ql: ABCDEFGHIJ

Contents of q2: Tom

Contents of q3: ABCDEFGHIJ

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал