8 C ++ Not-So-Beginner Features

8 C ++ Not-So-Beginner Features - dummies

Язык C ++ содержит так много функций, которые начинающие программисты не могут понять каждый. К счастью, вам не нужно осваивать все функции языка, чтобы писать большие, реальные программы. Ниже перечислены десять функций, которые вы можете захотеть взглянуть вперёд, на случай, если вы их увидите в программах других людей.

Команда C ++ goto

Эта команда полностью возвращается к C, предшественнику C ++. В принципе, использовать эту команду легко. Вы можете разместить метку goto; где угодно. Когда C ++ сталкивается с этой командой, управление немедленно переходит к метке, как показано в этом фрагменте кода:

 for (;;) {if (условное выражение) {goto outahere;} // ... все, что вы хотите ...} outahere: // ... программа продолжается здесь ... 

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

Терминальный оператор C ++

Тернарный оператор является оператором, уникальным для C и C ++. Он работает следующим образом:

 int n = (условный)? expression1: expression2; 

The? оператор сначала оценивает условное. Если условие истинно, то значение выражения равно значению выражения 1; в противном случае он равен значению выражения2.

Например, вы можете реализовать функцию maximum () следующим образом:

 int max (int n1, int n2) {return (n1> n2)? n1: n2;} 

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

Перечислимые типы в C ++

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

 enum Colors {BLACK, BLUE, GREEN, YELLOW, RED}; Цвета myColor = BLACK; 

Проблема с перечисленными типами заключается в реализации: вместо того, чтобы создавать истинный тип, C ++ использует целые числа. В этом случае BLACK присваивается значение 0, BLUE - 1, GREEN2 и т. Д.

Стандартная библиотека 2011 года для C ++ «исправила» эту проблему, создав тип перечисляемого класса, как показано в следующем фрагменте:

 класс enum Цвета {BLACK, BLUE, GREEN, YELLOW, RED} ; Цвета myColor = Цвета:: BLACK; 

В этой версии Colors - новый тип.Каждая из констант BLACK, BLUE и т. Д. Являются членами типа Colors. Вы все равно можете поместить объект класса Colors в int, но неявный бросок не разрешен.

Пространства имен C ++

Можно предоставить разные сущности в двух разных библиотеках с тем же именем. Например, функция grade () в библиотеке Student, вероятно, присваивает оценку, тогда как функция grade () в библиотеке CivilEngineering может устанавливать уклон сбоку холма. Чтобы избежать этой проблемы, C ++ позволяет программисту разместить свой код в отдельном пространстве имен. Таким образом, класс в пространстве имен учащихся отличается от класса в CivilEngineering.

Пространство имен находится над именем класса. Функция класса () члена класса BullDozer в пространстве имен CivilEngineering имеет расширенное имя CivilEngineering:: BullDozer:: grade ().

Все объекты и функции библиотеки находятся в пространстве имен std. Заявление в начале шаблона программы с использованием пространства имен std; говорит, что если вы не видите указанный объект в пространстве имен по умолчанию, перейдите в std.

Чистые виртуальные функции в C ++

Вам не нужно определять функцию, объявленную виртуальной. Такая неопределенная функция известна как функция виртуального члена . Однако в этот момент все усложняется. Например, класс с одной или несколькими чистыми виртуальными функциями называется абстрактным и не может использоваться для создания объекта. Решите эту тему после того, как почувствуете себя комфортно с виртуальными функциями и поздним связыванием.

Строка строки C ++

Большинство языков включают строковый класс в качестве встроенного типа для простой обработки строк символов. Теоретически класс строк должен делать то же самое для C ++. На практике, однако, это не так просто. Поскольку строка не является внутренним типом, сообщения об ошибках, которые генерирует компилятор, когда что-то не так, более похожи на сообщения, связанные с определенными пользователем классами. Для новичков эти сообщения могут быть очень трудно интерпретировать.

строка не является даже классом. Это экземпляр класса шаблона. Сообщения об ошибках могут быть захватывающими.

Множественное наследование в C ++

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

На самом деле возникает так много проблем, что C ++ является единственным C-подобным языком, который поддерживает множественное наследование. Java и C #, оба языка, полученные из C ++, решили отказаться от поддержки множественного наследования.

Шаблоны C ++ и Библиотека стандартных шаблонов

Создатели C ++ заметили, что похожими функциями, такими как:

 int max (int n1, int n2) {if (n1> n2) {return n1;} return n2;} double max (double n1, double n2) {if (n1> n2) {return n1;} return n2;} char max (char n1, char n2) {if (n1> n2) {return n1;} return n2;} 

«Было бы здорово, - говорит один другому, - если вы можете заменить тип псевдо-типом T, который вы могли бы определить во время компиляции?«Прежде чем вы это узнаете, престо-шаблоны станут частью C ++:

 шаблон T max (T t1, T t2) {if (t1> t2) {return t1;} return t2;} 

Теперь программист может создайте max (int, int), заменив T на int и компилируя результат, создайте max (double, double), заменив T двойным и т. д. Комитет по стандартам даже выпустил целую библиотеку классов, известную как стандартная библиотека шаблонов (короткая версия STL), основанная на шаблонных классах.

Однако для новичков предмет шаблонных классов начинает синтаксически очень сложным. Кроме того, ошибки, которые генерирует компилятор при неправильном создании шаблона, сбивают с толку эксперту, неважно, новичок. Это определенно тема, которая должна подождать, пока вы не почувствуете себя комфортно с основным языком.