|
Программирование >> Поддержка объектно-ориентированного программирования
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 могут пригодиться в тех случаях, когда на первый план выходит скорость работы программы. Один из них - когда в реальном времени происходят какие-то вычисления во внутреннем цикле программы.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |