Программирование >>  Поддержка объектно-ориентированного программирования 

1 ... 24 25 26 [ 27 ] 28 29 30 ... 120


char* p = new char[100000000];

cout << done, p = << long(p) << \n;

выдаст

done, p = 0

Память не выделена, и вам сделано предупреждение! Отметим, что, задав реакцию на такую ситуацию в функции new handler, пользователь берет на себя проверку: исчерпана ли свободная память. Она должна выполняться при каждом обращении в программе к new (если только пользователь не определил собственные функции для размещения объектов пользовательских типов; см.$$R.5.5.6).

3.3 Сводка операторов

Полное и последовательное описание операторов С++ содержится в $$R.6. Советуем ознакомиться этим разделом. Здесь же дается сводка операторов и несколько примеров.

Синтаксис операторов

оператор: описание

{ список - операторов opt } выражение opt ;

if ( выражение ) оператор

if ( выражение ) оператор else оператор

switch ( выражение ) оператор

while ( выражение ) оператор

do оператор while ( выражение )

for (начальный-оператор-for выражение opt; выражение opt) оператор

case выражение- константа : оператор default : оператор break ; continue ;

return выражение opt ;

goto идентификатор ; идентификатор : оператор

список- операторов: оператор

список- операторов

оператор

начальный-оператор-for: описание выражение opt ;

Обратите внимание, что описание является оператором, но нет операторов присваивания или вызова функции (они относятся к выражениям).

3.3.1 Выбирающие операторы

Значение можно проверить с помощью операторов if или switch:

if ( выражение ) оператор if ( выражение ) оператор else switch ( выражение ) оператор

оператор



В языке С++ среди основных типов нет отдельного булевского (тип со значениями истина, ложь). Все операции отношений:

== != < > <= >=

дают в результате целое 1 , если отношение выполняется, и 0 в противном случае. Обычно определяют константы TRUE как 1 и FALSE как 0.

В операторе if, если выражение имеет ненулевое значение, выполняется первый оператор, а иначе выполняется второй (если он указан). Таким образом, в качестве условия допускается любое выражение типа целое или указатель. Пусть a целое, тогда

if (a) ... эквивалентно

if (a != 0) ... Логические операции

&& !

обычно используются в условиях. В операциях && и второй операнд не вычисляется, если результат определяется значением первого операнда. Например, в выражении

if (p && l<p->count) ...

сначала проверяется значение p, и только если оно не равно нулю, то проверяется отношение l<p->count. Некоторые простые операторы if удобно заменять выражениями условия. Например, вместо оператора

if (a <= b)

max = b; else

max = a;

лучше использовать выражение

max = (a<=b) ? b : a;

Условие в выражении условия не обязательно окружать скобками, но если их использовать, то выражение становится понятнее.

Простой переключатель (switch) можно записать с помощью серии операторов if. Например,

switch (val) { case 1:

f();

break; case 2:

g();

break; default: h();

break;

можно эквивалентно задать так:

if (val == 1) f();

else if (val == 2)

g();

else

h();

Смысл обеих конструкций совпадает, но все же первая предпочтительнее, поскольку в ней нагляднее показана суть операции: проверка на совпадение значения val со значением из множества констант.



Поэтому в нетривиальных случаях запись, использующая переключатель, понятнее.

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

switch (val) { возможна ошибка

case 1:

cout << case 1\n ; case 2:

cout << case 2\n ;

default:

cout << default: case not found\n ;

при val==1 напечатает к большому удивлению непосвященных:

case 1 case 2

default: case not found

Имеет смысл отметить в комментариях те редкие случаи, когда стандартный переход на следующий вариант оставлен намеренно. Тогда этот переход во всех остальных случаях можно смело считать ошибкой. Для завершения оператора в варианте чаще всего используется break, но иногда используются return и даже goto. Приведем пример:

switch (val) { возможна ошибка

case 0:

cout << case 0\n ; case1: case 1:

cout << case 1\n ;

return; case 2:

cout << case 2\n ;

goto case1;

default:

cout << default: case not found\n ; return;

Здесь при значении val равном 2 мы получим:

case 2 case 1

Отметим, что метку варианта нельзя использовать в операторе goto:

goto case 2; синтаксическая ошибка

3.3.2 Оператор goto

Презираемый оператор goto все-таки есть в С++:

goto идентификатор; идентификатор: оператор

Вообще говоря, он мало используется в языках высокого уровня, но может быть очень полезен, если текст на С++ создается не человеком, а автоматически, т.е. с помощью программы. Например, операторы goto используются при создании анализатора по заданной грамматике языка с помощью программных средств. Кроме того, операторы goto могут пригодиться в тех случаях, когда на первый план выходит скорость работы программы. Один из них - когда в реальном времени происходят какие-то вычисления во внутреннем цикле программы.



1 ... 24 25 26 [ 27 ] 28 29 30 ... 120

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика