|
Программирование >> Процедурные приложения
Ниже мы рассмотрим некоторые отличия языка C++ от языка С, не связанные с объектным программированием. Синтаксис комментариев В C++ комментарии могут вводиться с помощью конструкции ,хотя старый метод маркирования блока комментариев посредством символов /* и */ по-прежнему допустим. Перечисления Имя перечисления является названием типа данных. Это упрощает описание перечислений, поскольку устраняет необходимость в указании ключевого слова enum перед именем перечисления. Структуры и классы Имена структур и классов являются названиями типов данных. В языке С понятие класса отсутствует. В C++ нет необходимости перед именами структур и классов указывать ключевое слово struct или class. Область видимости в пределах блока Язык C++ дает возможность объявлять переменные внутри блоков программного кода, т.е. непосредственно перед их использованием. Переменная цикла может объявляться даже непосредственно внутри инициализатора цикла, как в следующем примере: . Объявление переменной непосредственно в месте ее использования for(int index = 0; index < MAX ROWS; index++) Оператор расширения области видимости Для разрешения конфликтов, связанных с именами переменных, введен оператор : :. Например, если некоторая функция имеет локальную переменную vector location и существует глобальная переменная с таким же именем, то выражение :: vector location позволяет обратиться к глобальной переменной в пределах указанной функции. Ключевое слово const С помощью ключевого слова const можно запретить изменение значения переменной. С его помощью можно также запретить модификацию данных, адресуемых указателем, и даже модификацию значения адреса, хранящегося в самом указателе. Безымянные объединения Безымянные объединения могут быть описаны всюду, где допускается объявление переменной или поля. Эта возможность обеспечивает экономичное использование памяти, поскольку к одной и той же области памяти могут получать доступ несколько полей одной структуры. Явные преобразования типов Существует возможность использования имен встроенных или пользовательских типов данных в качестве функций преобразования. В некоторых случаях удобнее использовать явное преобразование, чем обычную операцию приведения типов. Уникальные особенности функций Язык C++ понравится программистам, работавшим ранее с языками Pascal, Modula-2 и Ada, поскольку позволяет задавать имена и типы параметров функции прямо внутри круглых скобок, следующих за именем функции. Например: void* vfunc(void *dest, int с, unsigned count) { В языке С после принятия стандарта ANSI также появилась возможность использования таких выражений. Таким образом, стандарт ANSI оказал влияние на создателей языка C++. Транслятор языка C++ проверит соответствие фактических типов значений, переданных в функцию, формальным типам аргументов функции. Также будет проверено соответствие типа возвращаемого значения типу переменной, которой присваивается это значение. Подобная проверка типов не предусмотрена в большинстве версий языка С. Перегрузка функций В C++ можно использовать одинаковые имена для нескольких функций. Обычно разные функции имеют разные имена. Но иногда требуется, чтобы одна и та же функция выполняла сходные действия над объектами различных типов. В этом случае имеет смысл определить несколько функций с одинаковым именем, но разным телом. Такие функции должны иметь отличающиеся наборы аргументов, чтобы компилятор мог различать их. Ниже показан пример объявления перегруженной функции с именем total(),принимающей в качестве аргументов массивы чисел типа int, float и double. int total(intisize, int iarray[]); float total(intisize, float farray!]); double total(int isize, double darray[]); Несмотря на то что три разные функции имеют одно имя, по типу аргументов компилятор легко сможет определить, какую версию функции следует вызвать в каждом конкретном случае: total(isize, iarray); total(isize, farray); total(isize, darray); Стандартные значения параметров функций В C++ можно задавать параметрам функций значения по умолчанию. В таком случае при вызове функции могут быть указаны значения только некоторых параметров, тогда как остальным они будут назначены автоматически. Списки аргументов переменного размера В C++ с помощью многоточия (...) могут быть описаны функции с неопределенным набором параметров. Контроль за типами параметров таких функций не ведется, что повышает гибкость их использования. Во вторую редакцию языка С данная возможность также была включена. В этом смысле язык C++ оказал влияние на язык С. Использование ссылок на аргументы функций С помощью оператора & можно задать передачу аргументов функции по ссылке, а не по значению. Например: int i; increment(i); void increment(int &variable reference) { variable reference++; Поскольку параметр variable reference определен как ссылка, его адрес присваивается адресу переменной i при вызове функции increment (). Последняя выполняет приращение значения параметра, записывая.его в переменную i. При этом, в отличие от языка С, нет необходимости в явной передаче адреса переменной i функции increment(). Макроподстановка функций Ключевое слово inline говорит о том, что при раскрытии вызова функции компилятор должен не записывать ссылку на нее, а выполнять подстановку ее кода целиком, что в случае небольших функций повышает быстродействие программы. Оператор new и delete Новые операторы new и delete, добавленные в язык C++, позволяют выделять и удалять в программе динамические области памяти. Указатели типа void В C++ тип void используется для обозначения того, что функция не возвращает никаких значений. Указатель, имеющий тип void, может быть присвоен любому другому указателю базового типа. Ключевые различия между С и С++ Наиболее существенное отличие C++ от языка С состоит в использовании концепции объектно-ориентированного программирования. Ниже рассмотрены связанные с этим новые средства языки C++. Классы и инкапсуляция данных Классы являются фундаментальной концепцией объектно-ориентированного программирования. Определение класса включает в себя объявления всех полей, возможно, с начальными значениями, а также описания функций, предназначенных для манипулирования значениями полей и называемых методами. Объекты являются переменными типа класса. Каждый объект может содержать собственные наборы закрытых и открытых данных. Структуры в роли классов Структура представляет собой класс, все члены которого являются открытыми, то есть нет закрытых и защищенных разделов. Такой класс может содержать как поля данных (что предполагается в стандарте ANSI С), так и функции. Конструкторы и деструкторы Конструкторы и деструкторы являются специальными методами, предназначенными для создания и удаления объектов класса. При объявлении объекта вызывается конструктор инициализации. Деструктор автоматически удаляет из памяти указанный объект, когда тот выходит за пределы своей области видимости. Сообщения Основным средством манипуляции объектами являются сообщения. Сообщения посылаются объектам (переменным типа класса) посредством особого механизма, напоминающего вызов функции. Набор сообщений, которые могут посылаться объектам класса, задается при описании этого класса. Каждый объект отвечает на полученное сообщение, выполняя определенные действия. Например, если есть объект Palette Colors, для которого задан метод SetNumColors Method, требующий указания одного целочисленного параметра, то передача объекту сообщения будет выглядеть следующим образом: Palette Colors.SetNumColors Method(16); Дружественные функции Концепция инкапсуляции данных внутри класса делает невозможным доступ к <<утренним данным объекта извне. Другими словами, закрытые члены классов недоступны функциям, не являющимся членами этого класса. Но в C++ предусмотрена возможность объявления внешних функций и классов друзьями определенного класса. Дружественные функции, не являясь членами класса, получают доступ к описанным в нем переменным и методам. Перегрузка операторов Уникальной особенностью C++ является возможность изменения смысла большинства базовых операторов языка, что позволяет применять их к объектам различных классов, а не только к данным стандартных типов. С помощью ключевого слова operator в класс добавляется
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |