Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
20.04.2024
Размер:
19.07 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

Кодинг

 

 

 

 

Сколько

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

to

BUY

 

 

 

 

 

 

w

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

o

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

df

 

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СКОЛЬКО ПЛЮСОВ У C++?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AvaLANche (avalanche@real.xakep.ru)

 

 

плюсов

ó

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C++?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Страуструп глазами кодеров

 

Обзор возможностей

 

языка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

время не прекращаются

споры, что лучше: Delphi или C/C++/Visual

C++.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

долгое

 

 

äî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Óæå

 

 

 

 

 

 

 

 

 

 

 

 

 

. Âåäü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в большинстве случаев сравниваются

две принципиально

разные вещи

 

 

áûë

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Причем

 

ее компилятора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разработки, а язык

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

èìÿ Delphi

носила лишь

среда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

седьмой версии

 

 

 

 

такое упущение, и теперь и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

борландовцы решили устранить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Object Pascal (â Delphi7

 

"накручена"

íà Microsoft

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. То же самое и с Visual C++: эта IDE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Delphi è Visual

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

язык называется Дельфи)

 

 

 

корректным было бы сопоставление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Поэтому

 

à íå C? Äà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C/C++ Compiler (cl.exe)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-ïëþñ",

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Почему

именно "си-плюс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Studio или объектного паскаля

è C++

 

 

 

 

 

 

 

 

 

 

 

 

 

Pascal -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-ориентированный язык "среднего уровня", а Object

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

потому

÷òî

C - процедурно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Такая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ООП и абстракций,

т.е. это совсем разные вещи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

высокоуровневый, с поддержкой

 

 

 

 

 

 

îäíî è òî æå, à

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

думать, что и C, и C++ - почти

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

путаница

в понятиях заставляет многих

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разные

 

. Не будем погружаться в дебри Си: тут все довольно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

âåäü

это совсем

языки

 

 

 

 

 

 

 

 

зверь C++.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

понятно, посмотрим лучше, что за

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AvaLANche (avalanche@real

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Что такое C++?

 

 

 

 

 

 

 

 

 

 

 

. Думаю, он бы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С этим вопросом лучше обратиться к его создателю

- Бьерну Страуструпу

 

 

 

 

 

 

 

 

поддерживает абстракцию

ответил примерно так: С++ - это язык, который

лучше, чем C

 

 

 

 

 

 

 

 

 

 

 

. Â òîì, ÷òî

 

 

 

-ориентированное (ООП) и обобщенное программирование

 

 

данных, объектно

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

все это означает, мы и будем

разбираться

 

 

 

ñ

 

íóëÿ ñ

 

целью добавления

 

новых

Прежде всего

 

замечу, что C++ разрабатывался

 

 

 

 

 

 

 

 

почему он лучше? :) В то же вре-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

средств к стандартному C. Теперь, надеюсь, понятно,

 

 

 

 

 

 

 

 

-

мя, тяжелого и убогого уродца создатели

делать не хотели, поэтому они руководствова

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ìèíè-

лись очевидными принципами:

эстетика (все должно быть понятно и элегантно),

 

 

 

 

 

 

должна

вызывать дополнительных расходов

мализм (поддержка какого-либо средства не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в не использующих его программах)

è ò.ï.

 

 

 

 

 

 

 

 

. Можно говорить, что язык

 

 

 

 

 

 

 

 

 

 

 

 

Важно и само

понятие поддержки стиля

программирования

 

 

 

 

 

 

 

какой-то стиль, когда использование

этого стиля в нем удобно, просто и

поддерживают

 

 

 

 

 

 

 

на C (такое тоже

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. При написании объектно-ориентированной программы

. Поэтому C

эффективно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

возможно) непередаваемые ощущения

заработанного геморроя обеспечены

 

 

 

 

 

 

стиль ООП,

 

но не поддерживает его.

лишь предоставляет возможность использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процедуры и функции

 

 

 

и их реализации в

Рассмотрим

непосредственно

различные техники программирования

 

âñåõ îñ-

 

 

 

 

поскольку

она является прародителем

С++. Начнем, конечно, с процедурной,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тальных.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

гласит: "Реши,

какие понадобятся

Основной принцип процедурного программирования

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Поддержка языком этой техники озна

процедуры,

и используй наилучшие алгоритмы"

 

 

 

 

 

 

 

 

возврата функциями зна-

 

 

 

передачи функции аргумента и возможности

чает возможность

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

оптимальные алгоритмы об-

. Залог успеха при написании программы - подобрать

 

 

 

 

.

чений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

работки данных и, чтобы

не запутаться в них, разбить

код на процедуры и функции

 

 

 

 

 

 

-

Здесь C++

очень похож

íà C. Òå æå

инструкции ветвления и циклы, такое же объявле

 

в любом месте программы), указателей и масси-

ние переменных (правда, возможное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вов, множество встроенных

типов и т.д. Хотя нововведений

тоже немало: ссылки (&),

 

памятью (new и delete),

 

 

операторы для работы с

операторы ввода-вывода (>> И <<),

 

 

 

 

 

. Вот пример функ-

встроенный

тип bool и т.д. Стоит упомянуть и обработку

исключений

выйти :)

 

вежливое, но настойчивое

приглашение пользователю

ции, которая реализует

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

("//" - открывает комментарий

до конца строки)

 

 

 

 

 

 

 

 

 

 

 

 

 

bool quit ()

 

 

 

 

 

 

 

 

 

 

{

char ans;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// сюда мы сохраним ответ

 

{

 

 

 

 

 

for (int tries = 0; tries <= 5; tries++)

 

 

 

 

 

 

 

// спрашивать будем в цикле

 

выйти (y/n)? ";

 

 

 

 

cout << "Вы действительно

хотите

 

 

 

 

вывода

 

 

 

 

 

// cout - стандартный поток

 

 

 

 

 

cin >> ans;

 

 

 

 

 

 

 

 

 

// cin - стандартный поток ввода

 

 

 

 

 

 

switch (ans) {

 

 

 

 

 

 

 

 

 

case 'y':

return true; // bool может быть только

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

case 'n':

 

 

 

 

 

 

 

 

 

 

cout "À çðÿ!\n";

 

 

 

 

 

 

 

 

 

return false; // èëè false

 

 

 

 

 

 

 

default:

 

 

 

 

 

 

 

 

 

 

cout "Повторяю вопрос:\n";

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

cout "Все равно выходим!\n";

 

 

 

 

 

 

 

return false;

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

90

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

 

r

Модули и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOW!

 

r

 

 

 

 

 

 

 

 

 

 

пространства

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

èìåí

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o m

 

Процедурное

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

программирование -

основа основ,

его стали

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

применять в

 

 

 

w

 

 

 

 

 

 

 

 

c

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

первых прог-

 

.

 

 

 

 

 

 

.

 

 

 

p

df

 

 

 

 

e

 

 

раммах для

первых ЭВМ.

 

 

 

 

 

 

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

Но ничто не стоит на месте: сложность программ

росла, и со

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

временем важным вопросом стала

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

процедур вместе с

 

 

 

 

 

 

 

 

организация данных. Так появились модули - набор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

данными, которые

îíè

обрабатывают. Стал актуален принцип сок-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рытия:

"организуй код в модулях так,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чтобы скрыть в них данные".

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На первый взгляд не совсем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

понятно, что и зачем нужно скрывать. Ответ

прост: поль-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зователю функций (хотя это такой же

программер, как и

их разработчик,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

òàê) íå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

назовем его

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

òàëè.

 

интересно, как они работают, для него главное,

чтобы они действительно рабо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поэтому

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разработчик предоставляет пользователю

некий

интерфейс (пользова-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тельский) - все, что

необходимо для вызова данного набора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функций

(модуля). Реали-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зация же этих функций не видна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

роено

большинство

библиотек

 

 

пользователю - она скрыта. По этому принципу пост-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(например, WinAPI, где

код функций

 

находится в сис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

темных dll'ках, а

программисты знают

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

о них из заголовочных файлов

òèïà

windows.h).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На самом деле модульное программирование не

новость

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нуждены

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и для С-кодеров, но они вы-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обходиться простой раздельной компиляцией (несколько .c-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ловочными

.h-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файлов) и заго-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файлами. Все

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объявленные переменные в хидерных файлах

оставались

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

по-прежнему глобальными, и к

ним можно было легко обратиться

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программы. В С++

 

 

 

 

 

 

 

из любого места

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

появилась такая полезная вещь, как

пространства имен (name-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

spaces). Объявляя

пространство имен,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ты, по сути, "ограничиваешь область

видимос-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ти" всему, что находится внутри него. А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Например, у нас есть

 

 

 

 

 

 

 

 

 

 

внутри может находиться любое объявление.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пространство имен A, содержащее

переменную c == 100, и есть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

глобальная переменная c

== 0. Тогда функции f()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и g() выведут 100, а h() - 0:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int c = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

namespace A {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int c = 100;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void f () { cout << c; }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void g () {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

cout

<<

A::c;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void h () {

cout

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

<< c;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь A::c означает, что c

берется из пространства имен A. Если бы мы

захотели обра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

титься к глобальной с из

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функции f (),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нам пришлось бы использовать

 

квалификатор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

глобального namespace'а:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void f () { cout << ::c; }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь нетрудно догадаться, как

реализовать сокрытие данных с помощью прост-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ранств имен. Рассмотрим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

модуль "строка

символов". На

самом деле в реальных прог-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раммах так

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вательский

делать не надо :), это лишь наглядный пример. Сначала

объявим пользо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

интерфейс.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// ôàéë "mystring.h"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

namespace MyString { // интерфейс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bool assign (char*); // присвоение значения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int

length (); // возвращает длину строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

char* value (); // возвращает значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получился довольно примитивный

модуль :). Теперь посмотрим на его реализацию.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// ôàéë "mystring.ñ"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <string.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include "mystring.h"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

namespace MyString { //

реализация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

const int max_

 

 

 

 

 

 

 

максимальный размер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

size = 1000; //

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int len = 0; // длина

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char v[max_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

size]; // массив символов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bool MyString::assign (char* str) {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (strlen (str) > max_size - 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (!strcpy

 

return false;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(v, str))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

else

 

 

 

 

return false;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

return true;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int MyString::length () {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

return len;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char* MyString::value () {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

return v;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

91

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

w

 

 

to

 

 

 

 

o

Кодинг

 

 

P

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

СКОЛЬКО ПЛЮСОВ У C++?

 

 

 

 

 

 

 

 

AvaLANche (avalanche@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь пользователю достаточно заинклудить

mystring.h, и можно пользоваться нашей

 

 

 

 

 

 

 

 

строкой:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

class MyString {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

length () = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

m

virtual int

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

c_str () = 0;

 

 

 

 

 

 

 

.

df

 

 

n

 

.c

 

virtual char*

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// и дальше в том же духе...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Модификатор

"virtual" означает "может быть переопределено

в производном классе", а "=0"

 

 

 

 

 

 

 

 

 

 

 

. Конечно,

я привел

совсем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

значит, что эта функция

ДОЛЖНА быть переопределена в будущем

длину строки, может

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функцию, возвращающую

 

 

 

 

 

 

 

 

 

 

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

 

 

â òîì, ÷òî ïðî-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

родиться только в воспаленном

мозгу :). Но смысл, думаю, ты уловил. Фишка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íå

зная конкретных деталей их реализации:

 

 

 

 

 

 

 

 

 

 

 

 

изводными классами можно пользоваться,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c"

 

 

// ôàéë "user.

void f (MyString& mystr)

.h"

{

.c_str ();

#include "mystring

 

 

 

cout << mystr

void f ()

{ if (!MyString::assing ("Yo!")) cout << "Ошибка!";

else cout << MyString::value (); }

}

 

 

 

 

-

 

 

 

 

 

При этом функция f () проглатывает

объект

любого класса, производного от нашего

полиморф

 

 

. Например, BigStr:

ного (т.е. предоставляющего

интерфейс

для множества других) MyString

 

 

 

 

 

 

class BigStr: public MyString {

 

 

 

 

int length () { return 100; }

 

 

...

 

 

 

 

// и так далее

 

 

 

 

 

Абстракция данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на объекты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ðå-

 

 

Ориентируемся

 

 

 

 

 

 

 

 

 

 

 

Используя модуль, описанный

выше, ты в какой-то момент столкнешься с проблемой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Действительно, трудно представить ситуацию, где дос-

 

 

Механизм

наследования из предыдущего примера приводит нас еще

к одной технике - объе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ализации нескольких таких строк

 

 

 

 

 

 

 

долгих и тяжелых

экспериментов над на-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Его основы - абстракция данных и иерархия клас-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Результатом

 

 

 

 

 

 

 

 

 

 

ктно-ориентированному

программированию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

таточно одной

подобной строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

станет

некое подобие типа данных, "псевдо тип" строка. Как это

 

 

сов. Последняя

представляет собой

различные проявления множественного

наследования

 

 

модулем-строкой

 

 

 

 

 

 

 

-

øèì

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

решение проблемы далеко от идеа-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

производный от A, класс С, производный от B,

и класс D, произ

сделать - описывать не буду, потому что такое

 

 

Например, класс A, класс B,

 

 

 

 

 

 

 

 

÷óäî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

несложную иерархию. Производный

(дочерний) класс B

 

На этот случай

 

C++ припас свое решение - возможность определения типов, которые

 

 

водный от A и B, представляют собой

 

 

 

 

 

 

.

 

ëà.

 

 

 

 

 

 

 

 

 

 

 

. Такие типы называются абстрактными или типами, оп-

 

 

наследует

все члены базового (родительского) класса A - это главная идея

наследования

 

ведут себя почти

как встроенные

 

 

 

 

 

 

 

 

 

. Просвещенные товарищи, знакомые

 

 

 

 

 

 

 

 

 

 

 

программы звучит так: "Реши,

какие

понадобятся классы, обеспечь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь принцип написания

ределяемыми пользователем (пользовательскими)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Последнее - до-

с ООП, думаю,

уже поняли, о чем речь.

 

 

 

 

 

 

руководствоваться принципом "реши,

 

полный набор операций над ними и вырази общность

через наследование"

 

 

 

 

íå ïðè-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

типами следует

 

 

 

 

 

 

 

 

 

 

 

 

. Тому, кто ее решит (на этапе проектирования программы),

 

 

Ïðè

работе с пользовательскими

 

 

 

 

 

 

 

íàä íèìè". Â

контексте ти-

 

вольно непростая задача

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

момент.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дется все переделывать в самый ответственный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

какие потребуются

типы, и обеспечь полный набор операций

 

 

 

 

 

 

òàê:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

наша строка будет выглядеть примерно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

па, определяемого пользователем,

 

 

 

 

 

 

Обобщенное программирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

class MyString {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сталкиваться с такими сущностями, как

список, стек и

 

 

 

 

 

int length; // длина

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тебе наверняка часто приходилось

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char* v; // массив символов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Классы, используемые для этих це-

 

 

public:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.п. Основная их функция

- хранить какие-то объекты

 

. Разумеется, хотелось бы, чтобы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cstr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-контейнерами)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// создает строку из C-строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лей, называются

контейнерами (классами

 

объекты любого

класса, переменные любого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

хранить

 

÷òî

угодно:

 

 

 

 

 

 

 

MyString (char* cstr);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

длины

 

 

 

 

 

 

класс "список"

óìåë

 

 

 

 

 

 

 

 

"алгоритм хра-

 

 

 

 

 

 

ïî

умолчанию - нулевой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. У такого контейнера

 

 

 

 

 

 

// создает пустую строку

 

 

 

 

 

 

 

 

 

встроенного типа - вот был

бы идеальный контейнер

 

 

 

 

 

 

 

 

хранимых данных.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

независимо от деталей представления

 

 

 

 

 

 

MyString ();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нения" должен быть представлен

 

 

 

универсальный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Используя их

 

 

 

 

 

 

MyString operator+ (MyString); //

конкатенация

 

 

 

 

 

 

 

 

 

 

 

Â

C++

это достигается при помощи

шаблонов (templates)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стек, например, объявляется

ýòî òàê:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bool operator== (MyString); // проверка

íà

равенство

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

template<class T> class Stack {

 

 

 

 

 

 

 

 

 

 

};

 

 

 

// и так далее...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T* v;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этот листинг демонстрирует

объявление класса - пользовательского

типа. Наш класс ре-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void push (T); // добавляем элемент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T pop (); удаляем элемент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

над строками. По

умолчанию все члены класса яв-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ализует строку и несколько операций

 

 

 

 

 

 

 

 

-члены этого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ляются

закрытыми (private), то есть доступ к ним имеют

только функции

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-члены опре

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Сами функции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

класса. Элементы, объявленные как "public",

общедоступны

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

деляются примерно

òàê:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Префикс template<T>

делает тип T параметром объявле

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

как и обычный:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(MyString mystr)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ния. Такой стек так же легко использовать,

 

bool MyString::operator==

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

== 0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

return (strcmp (v, mystr.v)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Stack<int> si;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

si.push (24);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

называется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Stack<MyString> sm;

 

 

 

 

 

 

 

 

 

 

 

 

Функция-член,

 

имеющая

 

 

то же название,

что и класс,

конструктором

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sm.push (MyString ("str"));

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объекты класса - конкретные пе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C++

 

 

 

 

 

 

 

 

 

 

 

 

Конструкторы

помогают по-разному инициализировать

 

 

инициализируются перемен-

 

Библия программиста на

 

 

sm.pop ();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в них выделяется необходимая

память,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Обычно

 

 

 

 

 

 

 

 

 

 

умолчанию, дру-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ременные

 

 

 

 

 

 

 

 

 

 

видно из листинга,

два конструктора: один по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

удобно. Это поз-

 

íûå

è ò.ï. Â MyString, êàê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шаблонами можно объявлять и функции, что тоже очень

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Пользоваться классом MyString можно так:

 

 

 

 

классов,

 

 

 

 

 

 

гой преобразует C-строку

 

в "нашенскую"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кроме

 

 

 

 

 

 

 

 

 

функции сортировки,

поиска и замены элементов контейне-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воляет писать универсальные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MyString mystr; // пустая

строка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

библиотеке C++ - в STL (Standart Template

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ров-шаблонов

 

 

 

 

 

 

 

 

 

 

 

 

в стандартной

 

MyString mystr2 ("C++

рулит");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаблоны

широко используются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

("C тоже ничего");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

туеву хучу всяких контейнеров (от строк до очередей

 

 

 

 

 

 

 

 

 

 

 

+ MyString

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. STL предоставляет пользователям

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Кроме

 

mystr2 = mystr

 

 

 

 

 

 

 

 

 

обе строки равны

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-вывода, универсальных алгоритмов и многое другое

 

 

 

mystr = mystr2; // теперь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с двумя

концами), потоков ввода

 

 

 

 

 

 

 

 

 

 

 

C. Вывод - must use. Пользоваться ей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стандартную библиотеку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

возможности и силь-

того, она включает в себя всю

 

 

один год, постоянно

улучшая

è ìî-

 

 

Удобно? Вполне! Пользовательские типы предоставляют огромные

 

 

 

потому,

что писали

åå íå

 

 

настоятельно рекомендую еще и

 

 

ìàéñ-

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вектор тихим

 

 

 

 

 

 

 

 

 

 

 

 

 

труд программиста при решении

самых разных задач, ведь опе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-то приспичит написать свой собственный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нелегкий

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И если вдруг кому

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

даже аналог

 

 

но упрощают

 

 

ничем не отличаются от операций

над переменными встроенных

дернизируя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не использовать), вряд ли у него получится

 

 

 

 

 

 

 

 

ким вечером (лишь бы стандартный

 

 

 

 

рации над

их объектами

 

 

 

 

 

 

 

типами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Типы, подобные

MyString,

принято называть конкретными

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

STL'овского

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

типов

(int, char è ò.ä.)

 

потеряно одно

свойство, которым обладал модуль MyString

- ðå-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

Однако в типе MyString

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Конечно, представление строки закрыто (private),

Размеры статьи

не позволяют даже кратко описать все возможности

C++, поэтому я постарал

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

различных техник

è ñòè-

 

 

ализация не отделена от интерфейса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

главного, основополагающего - реализации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И при изменении реализации строки, прог

ся сделать обзор самого

 

. Âñåõ çà-

 

 

 

но, тем не менее, оно "видно" пользователю

 

 

 

 

 

 

 

 

 

ñâîé êîä. Ýòî íå åñòü ãóä. Íî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

âåñü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Опять же не претендуя на полноту

 

 

 

 

 

 

 

 

раммеру-юзеру класса придется перекомпилировать

как со встроенными, и тут по-

ëåé

программирования

в этом языке

 

 

 

 

 

магазин - за книгой

Страуст-

 

 

 

 

 

 

 

 

 

 

 

прямиком в книжный

 

 

 

что поделаешь, с конкретными типами мы

хотим работать

интересовавшихся отправляю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C++". Прочитав эти несчастные

12 сотен страниц,

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ðóïà

"Язык программирования

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

абстра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

языка C++.

 

 

 

 

 

 

 

 

 

другому никак

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

представления, надо пользоваться

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

безграничные возможности

 

 

 

 

 

 

 

 

 

Если же реализацию необходимо отделить от

 

 

 

 

ты сможешь реально оценить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Тогда интерфейс будет примерно такой:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ктными типами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

92

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

 

NOW!

o

Кодинг

 

 

w

 

 

to

BUY

 

 

 

PHP:

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PHP: БЕЙ ШАБЛОНОМ!

 

 

 

 

 

 

 

Никита "red_way" Кислицин (nikitoz@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шаблоном!

 

 

 

 

 

 

 

 

 

 

 

Áåé

 

 

 

 

 

 

Создаем свои шаблоны в PHP

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

аргументом противников

PHP как языка для разработки web-приложений

является

 

 

Главным

 

неудобно при создании серьезных

 

код сценария прямо в html - крайне

то, что встраивать

 

не разбираются в PHP :).

 

откровенно говоря, совсем

 

. Òàê âîò, ýòè ëþäè,

 

 

проектов

 

 

.xakep.ru)

 

 

 

 

_way" Кислицин (nikitoz@real

 

 

 

 

Никита "red

 

 

 

Конечно, с ними сложно не согласиться: смешанный

с разметкой

код вызывает рвотный

 

 

 

 

 

 

-

рефлекс, особенно когда речь идет о создании больших систем,

где число строк неко

 

 

 

 

 

-

торых сценариев

может достигать десятков тысяч! Но следует

заметить, что возмож

 

 

и быстрых скриптов,

êîä â õòìë

незаменима при разработке маленьких

ность встраивать

 

 

 

создать

 

языком средства работы со строками позволяют

а, кроме того, предлагаемые

 

-

совершенный обработчик

шаблонов, с помощью которого всю html-разметку

можно зап

 

 

è

 

 

 

 

 

 

 

- о шаблонах

росто абстрагировать

от кода PHP. Об этом-то мы сегодня и поговорим

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

их применении

 

 

 

 

 

 

 

 

 

 

 

 

 

Âàñ èñò äàñ?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перед нами четко поставленная

задача - надо найти наиболее

удобный и производи

 

 

 

 

 

 

 

 

 

. Отчасти эту задачу мы уже реша-

тельный путь

к абстракции кода PHP

от html-разметки

 

 

 

функции, которые

выводи-

 

 

 

 

 

 

 

 

 

 

 

части и описывая

ли, выделяя у разных страниц сайта общие

 

 

 

 

ìû

 

-

 

 

 

. Более того, естественным образом продолжая этот путь,

получа

 

 

 

 

 

подходе

ли бы их браузеру

 

 

 

 

 

 

 

 

структуры. Но один минус при таком

ли довольно

красивые и удобочитаемые

 

 

 

 

находится

вместе с кодом, пусть и в более

 

 

 

 

 

 

 

 

 

 

 

âñå æå

остается: разметка html все равно

 

 

 

 

 

 

 

 

переход к

 

 

 

форме.

Вполне

естественным

в таких условиях является

структурированной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сайтов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

многоуровневой шаблонной организации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-ñòðà-

 

 

 

 

 

 

 

 

 

 

 

 

. Как я уже не раз отмечал, каждая html

Основная идея заключается в следующем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

ница состоит из нескольких

логических кусков (тут совсем не важно, как

мы их разделя

 

 

 

 

 

ïîëå).

 

 

 

 

колонка с новостями и основное текстовое

ем; например,

колонка с навигацией,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

части страницы

 

 

системы мы можем присвоить каждой такой

При помощи шаблонной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шаблон может иметь несколько переменных,

собственное имя - имя шаблона. Каждый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

которые при его обработке заменяются

либо обычным текстом, либо выводом других

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как работают такие системы?

 

 

 

 

 

 

 

 

Любые обработчики

массивов текстовой информации,

косвенно или прямо,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. В двух словах ее можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íî âñå æå

используют

теорию конечных автоматов

 

 

 

посимвольно

è

 

 

 

 

 

информация обрабатывается

 

описать следующим

образом:

 

 

 

 

-

 

на основе множества

правил для различных

символов или последователь

 

 

ностей символов "автомат"

(устойчивое среди программистов выражение)

 

 

 

 

 

 

 

 

 

 

 

 

идентифицируются

íåêî-

переходит в различные состояния (которые обычно

 

íèõ

 

 

 

 

 

èç

 

 

 

 

. Число состояний конечно, а значит, для каждого

торой переменной)

 

 

 

 

 

. Òàê,

переходя от символа к символу и из

 

 

можно создать еще по правилу

 

 

 

 

 

 

некоторые действия - при этом

состояния в состояние, "автомат" совершает

 

 

текст, достаточно несколь-

ему совершенно не надо держать в памяти весь

 

 

 

 

 

 

 

 

 

 

 

ких байт. Естественно, класс задач, решаемых

таким образом, довольно

 

 

узок, но все лексические обработчики

так или иначе используют идеи этой

 

 

регулярных выражений функцио-

теории. Более того, я уверен, библиотеки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нируют как раз на базе этой теории

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Около 2500 строк :)

 

Код одного из файлов системы SmartTemplate

системе шаблонов - шаблон

. Таким образом, речь идет уже о многоуровневой

 

 

 

-

шаблонов

 

 

 

 

 

 

 

 

верхнего уровня при обработке вызывает шаблон

более низкого уровня и так далее. Что

бы было понятнее, разберем простой пример:

 

 

 

 

 

 

<Html>

</Title></Head>

 

 

 

 

 

 

<Head><Title> {TITLE}

 

 

 

 

 

 

<Body>{BODY}</Body>

 

 

 

 

 

 

 

 

</Html>

 

 

 

 

 

 

 

 

 

 

 

уровня для

 

 

. Он имеет

две переменные:

Это может быть шаблон верхнего

любого сайта

текстом;

вторая же,

. Первая из них, очевидно, может сразу заменяться

 

 

 

{TITLE} è {BODY}

 

 

должна заменяться выводом шаблона body, который

для большей структурированности,

 

 

 

 

 

 

 

может иметь следующий вид:

 

 

 

 

 

 

 

 

<Table width=100%>

 

 

 

 

 

 

 

 

 

<tr><td>Навигация</td>

 

 

 

 

 

 

 

 

<td>Main</td>

 

 

 

 

 

 

 

 

 

<td><Новости></td>

 

 

 

 

 

 

 

 

 

</tr><tr>

 

 

 

 

 

 

 

 

 

<td>{NAVIGATION}</td>

 

 

 

 

 

 

 

 

<td>{MAIN}</td>

 

 

 

 

 

 

 

 

 

<td>{NEWS}</td>

 

 

 

 

 

 

 

 

 

</tr></table>

 

 

 

 

 

 

 

 

 

94

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Пример кода

 

<?

 

 

 

 

include "class.

 

 

 

 

FastTemplate.php"; /* Подключаем главный файл шаблонной

системы */

 

 

 

$tmpl=new

FastTemplate("."); /* Создаем новый экземпляр класса

 

FastTemplate */

 

 

 

$tpl-

 

 

 

 

>define(array("top"

 

имена файлов к

 

=> "top.tpl", "doc"=>"doc.tpl")); /* Привязываем

символическим именам шаблонов */

$tpl-

 

>assign(array("NAVIGATION" => "Here is menu...",

"MAIN" =>

"Here is text",

 

"NEWS" => "Here are some

news...")); /* Присваиваем переменным шаблона

body значения, на

 

следующем шаге обрабатываем этот шаблон */

$tpl-

 

 

>parse("BODY", "doc");

 

$tpl-

 

 

 

 

$tpl->parse("TOP", "top"); /* Парсим шаблон верхнего уровня */

>FastPrint();

/*

 

следующей:

 

 

Выводим юзеру результат. Эта запись равносильна

$tpl-

 

 

 

 

>FastPrint(TOP),

 

переменной

 

 

т.е. функция принимает в качестве параметра имя

с результатом */

 

 

 

?>

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

Вышел PHP

4.3.3!

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После долгой и изнурительной

 

 

 

 

 

 

 

 

 

 

 

 

 

работы программистов и бета-

 

 

 

 

 

 

 

 

 

 

 

 

 

тестеров, наконец-то вышел

 

 

 

 

 

 

 

 

 

 

 

 

 

полноценный

релиз PHP 4.3.3.

 

 

 

 

 

 

 

 

 

 

 

 

 

Основные изменения:

 

 

 

 

 

 

 

 

 

 

 

 

 

* Переписаны

многие функции по

 

 

 

 

 

 

 

 

 

 

 

 

работе с сокетами

 

 

 

 

 

 

 

 

 

 

 

 

 

* Исправлено множество ошибок,

 

 

 

 

 

 

 

 

 

Прикручены

 

приводящих к buffer overflow

 

 

 

 

 

 

 

 

 

 

(2.0.15)

новые версии библиотек Expat (1.95.6), PCRE (4.3), GD

 

 

 

 

 

 

 

 

 

 

* Переписаны функции по работе с

протоколом IMAP и некоторыми базами

 

 

 

 

 

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Исправлено более сотни разнообразных глюков :)

 

 

 

 

 

 

 

 

 

 

 

Итог: бета-тестеры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

постарались на славу. Пока слышал только

 

 

 

 

 

 

 

 

 

 

положительные отзывы

об этой версии, так что must have.

 

 

 

 

 

 

 

 

 

 

 

 

Каждая из трех переменных

этого шаблона уже может

заменяться текстом. Хотя, ко-

 

нечно,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можно и для каждой их них создать еще по шаблону :).

 

 

 

 

 

 

Кто парсер?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

À ãäå æå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PHP? Кто будет парсить эти наши шаблоны?

Резонный вопрос. Обработка

шаблонов - интересная и

обширная тема.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Однако не думай, что сегодня мы будем пи-

сать парсер - незачем, их уже

создано достаточное

количество, и реализованы они как

ðàç íà PHP. Òóò

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

имеются в виду шаблонные системы типа FastTemplate,

SmartyTemplate

и т.п., которые распространяются абсолютно

бесплатно,

 

 

 

 

накомиться с

их кодом. Чтобы

 

 

 

 

 

 

 

и любой желающий может оз-

 

 

 

 

 

 

добавить конкретики (синтаксис

различных систем раз-

нится), дальнейшее

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

описание я буду вести для FastTemplate. К слову, этот

пакет ты мо-

жешь слить с официального сайта системы (www.

 

 

 

 

 

 

 

 

нашего X-диска. Там же лежат

 

 

 

 

 

 

 

thewebmasters.net/php/) или взять с

 

 

 

 

 

 

 

 

 

 

 

 

 

несколько полезных статей и куча PHP-классов!

Но вернемся к шаблонам.

Как же по заданной болванке сгенерировать

 

обычную html-

 

 

 

 

 

 

 

 

 

 

 

 

 

страницу и вывести ее браузеру? В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

большинстве систем для этого используется объе-

ктный подход: порождается новый экземпляр класса,

который имеет несколько свойств

(ïóòü, ïî

которому хранятся шаблоны, имя

верхнего

 

 

 

шаблона и значения

переменных)

и методов (заполнить какую-то

 

переменную, обработать

 

 

 

 

 

ванную страницу пользователю

шаблон, вывести сгенериро-

è ò.ä.).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В блоке с кодом приведен примерный

сценарий, формирующий и выводящий HTML-

страницу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользователю. А сейчас я просто

прокомментирую основные шаги обработ-

êè

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шаблонов при помощи рассматриваемого

пакета.

Прежде всего необходимо подк-

лючить ядро системы -

 

 

 

 

 

 

 

 

 

 

ïî

 

 

 

 

 

 

 

 

 

ôàéë class.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обработке шаблонов. После

 

 

FastTemplate.php. Именно там описаны все функции

 

этого создается новый

экземпляр класса и меняются

некоторые его свойства. В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частности, необходимо при помощи метода define

сопоста-

вить имя каждого используемого

шаблона с

именем конкретного

 

 

 

 

 

ìîùè

 

 

 

 

 

 

 

 

 

 

 

 

файла. Затем при по-

 

 

метода assign заполняются переменные

 

шаблона; если же ты хочешь поместить

туда вывод другого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шаблона, его следует сперва обработать при

помощи

метода parse.

В результате получаем

переменную, содержащую вывод

 

можем ее

запросто

 

 

 

обработанного

шаблона, и

подставить как

параметр

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

к методу Assign, заполняющему перемен-

ную в шаблоне более высокого уровня. Так

 

 

 

 

 

 

 

 

 

 

 

 

 

ее вывода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

снизу вверх и формируется страница. Для

пользователю используется метод

FastPrint(VAR_NAME), в качестве парамет-

ра которого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

указывается имя переменной с выводом шаблона;

если этот параметр

опустить, по дефолту

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подставляется вывод последней болванки, обработанной мето-

Список подключенных файлов и описанных функций одной из шаблонных систем. Нехило, да? :)

äîì parse.

 

Вот такой удобный инструмент. Теперь

можно без проблем создать сложную

систему, которую даже по прошествии

некоторого времени будет

удобно мо-

дифицировать - код полностью отде-

лен от дизайна, что, опять же, предос-

тавляет некоторую свободу и програм-

мисту, и дизигнеру, и верстальщику -

все занимаются только своим делом.

Красота? А то! :)

 

Но рассказ не будет полным, если я не

затрону вопрос о том, как

подобные

шаблонные системы устроены внутри -

это же очень интересно! Смотри: фак-

тически, программисты создали свой

собственный язык на основе

óæå ñóùå-

ствующего высокоуровнего,

äà ê òîìó

же и интерпретируемого! Поэтому чи-

тай врезки. Они твое счастье :).

www.

 

 

thewebmasters.

- здесь можно

скачать множество полезных

net/php

классов и последнюю версию FastTemplate

 

Tips&Tricks

Если вдруг в TheBat! запаролен локальный ящик, а тебе очень хочется этот пароль снять :), тогда иди в каталог TheBat! (по умолчанию C:\Program Files\The Bat!) и ищи файл Account.cfg в подкаталоге:

Mail\User_Name, где User_Name - имя ящика нужного юзера. Открой этот файл Блокнотом и ищи где-то вверху три последовательных набора символов типа yDzzznMzAXYcBHo+. Далее: Первый способ: просто удали третий набор символов (не удаляя в конце символ "прямоугольник"). Второй способ: замени третий на-

бор вторым.

После этого сохрани изменения и наслаждайся результатом :).

P.S. Не забудь перед глумлением над файлом Account.cfg сделать его резервную копию.

Shanker shanker@mail.ru

Хочешь увидеть свои советы в журнале? Присылай их на адрес Sklyarov@real.xakep.ru. Ведущий рубрики Tips&Tricks Иван Скляров.

95

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

Юниты

 

 

 

to

 

 

 

w

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

ÇÀË ÑÓÄÀ

Урожденная

Жанр Похожесть Мать/отец Требует Групповуха Описуха

Lionheart:

Legacy of the

 

 

 

 

 

 

 

 

 

Crusader

 

 

 

 

 

 

 

RPG

 

 

 

 

 

 

 

Gorasul

BIS/Interplay

 

 

Reflexive,

 

 

 

 

 

128(256)

 

Ð3-600(P3-1000),

 

 

 

 

 

LAN, èíåò

 

 

 

 

. Òâîÿ

 

 

 

 

 

 

Довольно

убогая игрушка

-

 

 

 

äî

 

задача незатейлива

безобра

 

 

â îä-

зия - бороться

с нечистью

 

 

 

 

 

 

ном из параллельных

миров, в

 

 

 

 

 

который

тебя занесла злая судь-

 

 

 

терпения

и начинай

ба. Наберись

 

 

 

управление

 

осваивать

нелегкое

-

 

 

 

 

главным

героем, ведь бесконеч

 

 

 

ïî

однообразным

ные блуждания

локациям

в поиске очередных

 

 

 

 

 

 

 

будут тво-

NPC (читай - квестов)

 

íà

 

им единственным

 

занятием

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

протяжении

âñåé èãðû

 

 

 

 

 

 

 

 

 

 

ПРИГОВОР

СЛАБО

 

Урожденная Жанр Похожесть Мать/отец Требует Групповуха Описуха

Демиурги 2

 

Смесь TBS и RPG

 

Демиурги

 

Nival Interactive/1C

3D

P3-600(P3-1000), 128(256),

LAN, èíåò

 

Посредственный сиквел

 

известнейшей TBS. И причина

такого вердикта даже не в том,

что разработчики поленились

хоть как-нибудь

 

графический движок. Нет,

графика-то как раз на уровне.

Дело в невероятной линейности

игры, отсутствии какой-либо

. Бесконечная

разветвленности

 

беготня от одного NPC к другому,

сопровождающаяся

постоянными

магическими битвами, уж очень

.

 

быстро надоедает

 

ПРИГОВОР

СРЕДНЕ

 

Урожденная Жанр Похожесть Мать/отец Требует Групповуха Описуха

Squad Battles: Advanced of the Reich

Wargame

Squad Battles

HPS Simulations/HPS Simulations P-200(P2-266), 32(64)

В ассортименте

Неплохой варгейм, который наверняка будет интересен российским геймерам. Сюжет игры

основан на реальных событиях

ПРИГОВОР

ХОРОШО

 

середины 1941 - конца 1942 года, происходивших на территории Европы и нашей Родины. Признаться, я не большой фанат подобных игр: прежде все-

го, из-за условности сражений. Однако эта игрушка произвела

на меня хорошее впечатление. Тактика и планирование - вещи

очень затягивающие.

Урожденная Жанр Похожесть Мать/отец

Требует Групповуха Описуха

Star Wars: Jedi Knight - Jedi Academy

FPS

Jedi Knight 1-2

LucasArts Entertainment/Raven

Software, Activision

P3-600(P3-1000), 128(256), 3D

LAN, инет Еще один сиквел, лишенный ка-

кой-либо оригинальности. Сценария в игре, в общем-то, нет:

ПРИГОВОР

ХОРОШО

 

на всеобщий суд представлены

15 отдельных миссий, связь между которыми найти довольно

сложно. Зачем их проходить - непонятно. Мой тебе совет - забей на них и сразу же начинай

тренироваться в мультиплеер. Поиграть в такую игрушку с друзьями по сетке - неописуе-

мое удовольствие.

Урожденная Жанр Похожесть Мать/отец

Требует Групповуха Описуха

Heaven & Hell

 

Симулятор Бога

 

Black & White

 

madcat Interactive Software/CDV

Software

3D

P3-800(P4-1400), 64(128),

LAN, èíåò

-

 

Симулятор Бога, и этим все сказа

но. Идея, конечно, неоригинальна,

однако концепция игры и ее реа-

ПРИГОВОР

ХОРОШО

 

 

 

.

лизация вызывают восхищение

Идея такова - ты Бог в полном

смысле этого слова. Но не думай,

что твои божественные

ñèëû íè-

чем не ограничены: в качестве

"подпитки" тебе нужна вера лю-

дей. Соответственно,

чем больше

 

.

 

 

в тебя верят - тем ты сильнее

Вербуй, защищай, борись со

злом, и люди к тебе потянутся!

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

1

 

2

 

3

 

4

 

96

Ньюсы

Феррум

Inside

PC_Zone

Implant

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

âîäû

 

интересная

позаимствованная

фильма),

реализовали

Неординарный

сюжет,

атмосфера

реальности

вижок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

очень

-

 

 

 

беспо

 

 

СУПЕР!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ñóïå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

маразм!

 

 

 

 

 

êîòî

 

 

 

-

 

è .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

захватывающий

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

íåò!

(правда,

 

одноименного

разработчики

ïÿòü

переданная

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чистейшей

 

 

 

 

 

 

 

плюсом!

 

добно виртуальной

 

видеод

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Íî

èäåÿ

 

èç

ðóþ

íà è

 

ркрасивый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

èãðó

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ýòî

 

 

 

 

 

ñ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

-

 

всегда

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ïðî

 

ïðå

 

 

 

 

 

 

 

áîëü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- -

 

 

 

-

è

стандарт

возводи

êî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Âñå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

повеству

виртуаль

 

èãðà

 

 

обыденно

 

 

5),

 

 

 

бросай

почти

имеет

 

 

 

 

 

 

 

 

 

Vista

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

немереных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Productions/Buena

256(512),

 

 

 

 

 

 

 

 

 

.

 

 

 

Добывай

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

игрушка,

 

 

 

áû,

 

назовешь

 

 

 

.

(всего

 

 

 

 

íîëü:

òîò,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â

 

 

 

 

 

 

стандартно,

 

 

 

 

 

è

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

-

 

 

 

путешествиях

 

Казалось

 

 

 

 

 

 

â

юнитов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1300),

 

 

 

 

 

 

 

íå

 

 

 

 

ресурсы

клепай

 

 

Тактики

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

èãðó

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

шей дельнонеинтересно

 

заводы,личествахбойвыигрываетше

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íûå

 

 

FPS

NOLF

Monolith Interactive Ð3

LAN, Изумительная

þùàÿ

íîì

РУЛЕЗ

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

юнитов

 

 

 

 

2

 

 

 

500(P4

èíåò

 

 

 

ìèðå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

1

 

 

 

 

 

 

 

 

î

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Tron

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

модным)Вроде

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

Урожденная

 

 

Похожесть

Ìàòü/îòåö

 

 

Групповуха

 

 

 

 

 

 

 

ПРИГОВОР

 

 

 

 

 

 

 

 

 

 

îñ

 

 

 

 

 

 

 

 

Æàíð

Требует

Описуха

 

 

 

 

 

 

 

Казаки

3D

 

которой

событиях

очень

войны

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

256(512),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Америки,

800),

 

сюжет

 

 

стало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

АнтантаRTSЗавоевание

-

 

RTS,реальных это мировой

СРЕДНЕ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

500(P3

LAN Обычная

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Lesta/Áóêà P3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

нован(сейчасПервой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

УрожденнаяЖанрПохожестьМать/отецТребуетГрупповухаОписуха

 

 

 

 

 

ПРИГОВОР

5 Взлом 6 Юниксоид 7

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

w

 

 

to

 

 

 

 

o

Юниты

P

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

ÇÀË ÑÓÄÀ

Stepan Ilyin aka Step (step@real.xakep.ru, www.units.ru)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

Muscle Car 3

 

 

 

 

 

 

тых" автомобилях

(старенькие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Урожденная

 

 

 

 

 

 

 

 

машины

с выступающими

 

 

 

 

 

Гонки

 

 

 

 

 

 

 

 

 

 

 

 

Æàíð

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Однако

получилось

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Похожесть

 

 

Muscle

Car 2

 

 

 

 

 

 

 

крыльями)

 

íî ýòî

äàæå

 

 

 

 

 

 

Star Software

 

такое...

Извини,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3Romans/Global

 

 

 

 

 

 

 

 

 

 

. Машины

 

 

 

Ìàòü/îòåö

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P3-800(P3

-1200), 128(256),

3D

игрой

не назовешь

 

 

пейзаж,

 

 

 

Требует

 

 

 

какие-то

спрайтовые,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обломись

 

 

 

 

 

 

 

 

 

-

 

 

 

Групповуха

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

как, впрочем,

и все окружаю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. По замыс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Редкостная

гадость

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

Описуха

 

 

 

 

 

Muscle Car

ùåå,

кажется

плоским,

à ôèçè

 

 

 

 

 

 

 

ëó

разработчиков,

 

 

 

 

íà

÷òî-òî

 

 

 

 

 

 

 

 

 

 

собой си-

ка и вовсе походит

 

 

 

 

 

 

 

 

 

должна представлять

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

неземное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мулятор гонок на "мускулис

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИГОВОР

 

 

ËÀÆÀ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Урожденная

 

Starsky & Hutch

 

 

 

 

 

играть в Starsky & Hutch, я

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Æàíð

 

 

Гонки

 

 

 

 

 

 

 

 

 

визжал от восторга, как ребенок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Эти веселые гоночки с ярко

 

 

 

 

 

 

Spy Hunter

 

 

 

 

 

 

 

 

 

 

 

Похожесть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выраженными элементами

 

 

 

 

 

 

Mind's Eye Productions/Empire

 

 

 

 

 

 

 

Ìàòü/îòåö

 

 

 

 

 

 

 

 

 

 

 

экшена поначалу приносили

 

 

 

 

Interactive

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Однако

 

 

 

Требует

 

 

P3-800(P4-1400), 128(256), 3D

 

массу

удовольствия

 

 

 

 

 

 

 

 

 

 

 

 

Обломись

 

 

 

 

 

 

 

 

спустя час стало ясно, что игре

 

 

 

Групповуха

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

явно не хватает разнообразия

 

 

 

Описуха

 

 

Аркадные гоночки со стрельбой

Æàëü, S&H

могла заслужить куда

 

 

 

 

 

Не зря говорят, что первое

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Начиная

более высокую оценку...

 

 

 

 

 

 

 

 

 

 

впечатление обманчиво

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИГОВОР

 

 

 

СРЕДНЕ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Урожденная

Pearl

Harbor: The Day of Infamy

они бы не стали настолько неп-

 

 

 

Æàíð

 

 

 

 

 

Аркада

 

 

 

 

 

 

 

 

 

 

рикрыто показывать степень

 

 

 

 

 

 

Похожесть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PH:

Shadows over Oahu

 

 

 

 

 

 

 

 

 

 

 

 

 

 

своей деградации! Эти одарен-

 

 

 

 

Ìàòü/îòåö

Asylum

Games/Activision Value

 

 

 

 

 

 

 

 

ные перцы решили выпустить

 

 

 

 

 

 

Требует

P2-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Групповуха

300(P2-400), 32(64)

 

 

 

 

на рынок свой предыдущий

 

 

 

 

 

 

 

Обломись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

продукт Pearl Harbor: Shadows

 

 

 

 

 

Описуха

Похоже,

разработчики из

 

 

 

 

 

 

 

 

 

 

 

over Oahu под другим названи-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Asylum Games совершенно не

 

ем. Именно так! Практически

 

 

 

 

 

 

 

боятся быть опущенными ниже

никаких изменений, никаких

 

 

 

 

 

 

 

плинтуса. В противном случае

 

нововведений! Нет слов.

 

 

 

 

 

 

 

 

 

ПРИГОВОР

 

ËÀÆÀ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Урожденная

 

Kreed

 

 

 

 

 

 

 

 

 

Отсутствие внятного сюжета с

 

 

 

 

 

 

 

 

 

 

 

 

 

первых же минут указывает на то,

 

 

Æàíð

 

 

 

 

FPS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что игра представляет собой

 

 

 

Похожесть

 

 

Devastation

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

очередную серию в мыльной

 

 

 

Ìàòü/îòåö

 

 

Burut Creative Team/Руссобит

 

 

 

 

 

 

опере "стреляй во всех, кто

 

 

 

Требует

 

 

 

P3-600(P3-1000), 256(512),

3D

 

 

 

 

 

 

 

 

попадется". Обычно подобные

 

 

 

Групповуха

 

 

LAN, èíåò

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

завернутый

игры, по крайней мере, имеют

 

 

 

Описуха

 

 

 

Посредственный FPS,

 

 

 

 

 

 

 

 

 

 

хорошую графическую

 

 

 

 

 

 

 

 

 

 

 

во впечатляющую обертку.

 

 

 

 

 

 

 

 

 

 

 

 

 

Обещали нам очередной хит, а

 

 

 

 

 

. Óâû, äàæå ýòèì

 

 

 

 

 

 

 

 

составляющую

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выдали, так сказать, "пустышку".

Kreed'а обделили.

 

 

 

 

 

 

 

 

 

ПРИГОВОР

 

 

 

СЛАБО

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Урожденная

Fire Chief

 

 

 

 

 

 

 

 

 

наглядно показывает, насколь-

 

 

 

Æàíð

Симулятор пожарного

 

 

 

 

 

 

 

 

 

 

 

 

 

ко все-таки сложна эта про-

 

 

 

 

 

 

Похожесть

911: Fire & Rescue

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

фессия, какую роль играет зна-

 

 

 

Ìàòü/îòåö

 

 

 

 

 

 

 

 

 

Monte

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ние теории, слаженность всех

 

 

 

 

Требует

 

 

 

 

Cristo/DreamCatcher

 

 

 

 

 

 

 

 

P2-300(P3-800), 128(256), 3D

 

 

 

подразделений и выбор наи-

 

 

 

 

 

Групповуха

 

 

 

 

 

 

 

 

Обломись

 

 

 

 

 

 

 

 

 

лучшего подхода к устранению

 

 

 

Описуха

Fire Chief - одна из немногих

 

 

 

 

 

очага возгорания. Оригиналь-

 

 

 

 

 

 

 

 

 

 

 

èãð,

 

которая предоставляет

 

 

 

ная идея и тщательно прорабо-

 

 

 

 

возможность почувствовать се-

 

танные все аспекты игры зас-

 

 

 

 

 

бя в шкуре пожарного. Гамеса

 

луживают высокой оценки!

 

 

 

 

 

 

 

ПРИГОВОР

 

ХОРОШО

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

94 Ньюсы

 

 

1

Феррум

 

 

 

2 Inside

3 PC_Zone

4 Implant

Соседние файлы в папке журнал хакер