Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 27

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 21 22 23 24 25 26 < 27 > 28 29 30 31 32 33 .. 204 >> Следующая

Следовательно, если задать оператор typedef с таким же именем, то компилятор + не всегда сможет различить эти два типа, например:
typedef int TypeA;
struct TypeA /* ошибка в С++: повторное определение TypeA */ {
int I; char С; double D; };
TypeA X; /* создаются при этом данные типа int
или структура ТуреА? */
sizeof (ТуреА) ; /* вычисляется размер данных типа int
или размер структуры ТуреА ?*/
Еще одна несовместимость связана с предыдущей: в языке С, если теги епшп, struct или union такие же, как имя, определенное typedef во внешней области видимости, то вы все еще можете оставить ссылку на typedef во внутренней области видимости (т. е. имя, определенное typedef, не скрыто). Однако в языке С++ имя typedef должно быть скрыто. Следующий фрагмент программы иллюстрирует различие.
typedef int ТуреА;
void main () (
struct TypeA
{
int I; char C; double D; };
TypeA X; /* в языке С идентификатор X имеет тип int;
в С++ X - это структура ТуреА */
sizeof (ТуреА) ; /* в С - вычисляет размер данных типа int;
в С++ - вычисляет размер структуры ТуреА */
}
В способах вычисления значений, возвращаемых оператором sizeof, есть два дополнительных различия. Первое: в языке С sizeof ('х') равно sizeof (int), а в С++ оно равно sizeof (char}. Далее, предположим, что определено перечисление
enum Е {X, Y,¦Z};
Тогда (второе различие) в С значение sizeof (X) будет равно sizeof (int), а в С++ равно sizeof (Е), что не обязательно равно sizeof (int).
Работа с несовместимыми конструкциями. Из существующей программы на С можно удалить любую из несовместимых с С++ конструкций так, что код будет компилироваться и иметь такое же смысловое содержание, как и при использовании компилятора С+ + . Компилятор С++ заметит все перечисленные варианты несовместимости, кроме двух последних, которые (особенно различия в значениях, создаваемых оператором sizeof) не приводят к появлению сообщений компилятора об ошибке, но изменяют смысловое содержание программы. Такая ситуация — исключение из общего правила: если программа успешно компилируется компиляторами С и С++, то она имеет одинаковое смысловое содержание в обоих языках.
Новые средства языка С++
В данном параграфе рассмотрены новые полезные средства языка С++, не являющиеся классами, из чего можете сделать вывод о том, что только они одни оправдывают переход к программированию на языке С++. Некоторые из этих компонентов включены в последние версии языка С (в частности, новый стиль комментариев, встроенные (inline) функции и типы констант, хотя они могут синтаксически отличаться от представления в языке С++). Другие компоненты, описанные здесь, уникальны в языке С++.
Комментарии
Наряду со стандартными ограничителями комментария (/* и */) в программе С++ можно задать комментарий-строку двумя символами //. Все символы, следующие за символами 11 до конца строки, являются частью комментария и пропускаются компилятором.
void main () // это комментарий-строка {
/* по-прежнему можно пользоваться традиционными ограничителями комментариев, удобными для задания комментария, занимающего более одной строки ... */ // операторы ... }
Операторы объявления переменных
В языке С локальная переменная (т.е. переменная, определенная внутри функции) должна объявляться в начале блока перед другими операторами программы. Однако в языке С++ объявление локальной переменной рассматривается как обычный оператор программы, следовательно объявление можно поместить в любом месте программы перед первой ссылкой на переменную.
Примечание
Блок — фрагмент кода, ограниченный символами { и }. На переменную, определенную внутри блока, можно ссылаться только внутри этого или внутри вложенного блоков (если она не скрыта переменной с таким же именем внутри вложенного блока). Таким образом блок определяет область видимости переменной.
В языке С++ код можно сделать более легким для чтения и сопровождения, помещая определение переменной непосредственно перед кодом, который ее использует, например:
void main () {
// другие операторы ...
int Count = 0; while (++Count <= 100) {
// операторы цикла ... }
// другие операторы ... }
Переменную можно объявить даже внутри цикла for.
// другие операторы ...
for (int i = 0; i < MAXLINES; ++i) {
// другие операторы ...
int Length = GetLineLength (i); if (Length == 0) break;
// другие операторы ...
}
if (i < MAXLINES)
// встретилась строка длиной 0
В приведенном коде считается, что объявление счетчика цикла i встречается за пределами блока, следующего непосредственно за оператором for. Следовательно, ссылаться на переменную счетчика можно и после блока for, а переменная Length, объявленная внутри блока for, доступна только внутри этого блока.
Если объявление включает инициализацию, элемент данных инициализируется при выполнении оператора объявления. Так, в приведенном примере переменная i создается и инициализируется однократно, когда программное управление достигает оператора for; а переменная Length создается и инициализируется на каждой итерации цикла for.
Предыдущая << 1 .. 21 22 23 24 25 26 < 27 > 28 29 30 31 32 33 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100