Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Операции и функции, которые можно применять к величинам этого тина.Стр 1 из 3Следующая ⇒
Концепция типа данных Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип. Тип данных определяет: внутреннее представление данных в памяти компьютера; множество значений, которые могут принимать величины этого типа; Операции и функции, которые можно применять к величинам этого тина. Все типы языка C++ можно разделить на основные и составные. В языке C++ определено шесть основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы. Основные типы данных в C++ Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова: 1. int (целый); 2. char (символьный); 3. wchar_t (расширенный символьный); 4. bool (логический); 5. float (вещественный); Double (вещественный с двойной точностью). Первые четыре тина называют целочисленными (целыми), последние два — типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой. Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов: · short (короткий); · long (длинный); · signed (знаковый); · unsigned (беззнаковый). 143) Трассиро́вка — пошаговое выполнение программы с остановками на каждой команде (assembler) или строке (c++). Трассировка соединений является, как правило, заключительным этапом конструкторского проектирования РЭА и состоит в определении линий, соединяющих эквипотенциальные контакты элементов, и компонентов, составляющих проектируемое устройство. Задача трассировки – одна из наиболее трудоемких в общей проблеме автоматизации проектирования РЭА. Это связано с несколькими факторами, в частности с многообразием способов конструктивно-технологической реализации соединений, для каждого из которых при алгоритмическом решении задачи применяются специфические критерии оптимизации и ограничения. С математической точки зрения трассировка – наисложнейшая задача выбора из огромного числа вариантов оптимального решения. Одновременная оптимизации всех соединений при трассировке за счет перебора всех вариантов в настоящее время невозможна. Поэтому разрабатываются в основном локально оптимальные методы трассировки, когда трасса оптимальна лишь на данном шаге при наличии ранее проведенных соединений. Основная задача трассировки формулируется следующим образом: по заданной схеме соединений проложить необходимые проводники на плоскости (плате, кристалле и т.д.), чтобы реализовать заданные технические соединения с учетом заранее заданных ограничений. Основными являются ограничения на ширину проводников и минимальные расстояния между ними. Указатели предназначены для хранения адресов областей памяти. Указатели Когда компилятор обрабатывает оператор определения переменной, например, int i=10;, он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (i) заменяются компилятором на адрес области памяти, в которой хранится значение переменной. Программист может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями. Итак, указатели предназначены для хранения адресов областей памяти. В C++ различают три вида указателей: · указатели на объект, · указатели на функцию · указатели на void, Они отличаются свойствами и набором допустимых операций. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом. Указатель на функцию Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тип «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»: тип (*имя) ( список_типов_аргументов ); Например, объявление: int (*fun) (double, double); Указатель на объект Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного). Простейшее объявление указателя на объект (в дальнейшем называемого просто указателем) имеет вид: тип *имя; где тип может быть любым, кроме ссылки и битового поля, причем тип может быть к этому моменту только объявлен, но еще не определен (следовательно, в структуре, например, может присутствовать указатель на структуру того же типа). Звездочка относится непосредственно к имени, поэтому для того, чтобы объявить несколько указателей, требуется ставить ее перед именем каждого из них. Например, в операторе int *a, b, *c; Указатель на void Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов). Указателю на void можно присвоить значение указателя любого типа, а также сравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом. Примеры объявления указателей Указатель может быть константой или переменной, а также указывать на константу или переменную. Рассмотрим примеры: Int i; // целая переменная const int ci = 1; // целая константа int * pi; // указатель на целую переменную const int * pci; // указатель на целую константу int * const ср = &i; // указатель-константа на целую переменную const int * const срс = &ci; // указатель-константа на целую константу Указатель на функцию Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тип «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»: тип (*имя) ( список_типов_аргументов ); Например, объявление: int (*fun) (double, double); Полезно рассматривать закрытую часть, как код, доступный только разработчику, а открытую часть – как описание интерфейса, который используется клиентами. Разработчик может изменить закрытую часть, и это не повлияет на правильность использования структуры клиентом. То есть при изменении закрытой части структуры не нужно переписывать код, который использует эту структуру (хотя может потребоваться его перекомпиляция). В открытую часть рекомендуется помещать только функции-члены, но не члены данных. В этом случае открытые функции-члены образуют интерфейс структуры (класса). В закрытой части можно помещать и функции, и данные. В этом случае для того, чтобы научиться пользоваться классом (структурой), его потенциальному пользователю необходимо ознакомиться только с определениями открытых функций-членов. Флаг Описание
Выведет на экран 7b +123.45 43 +678.9
Выведет на экран 7b +123.45 123 123.45 Кроме флага форматирования также можно установить ширину поля потока, символ для заполнения и число цифр после десятичной запятой. Для этого используются следующие функции: int width(int len); char fill(char ch); int precision(int num); Функция width() устанавливает ширину поля и возвращает текущую ширину. Вторая функция - fill() устанавливает текущий символ заполнения и возвращает предыдущий символ заполнения. По умолчанию используется пробел. А функция precision устанавливает точность чисел с плавающей точкой. В научном режиме эта функция определяет количество цифр после десятичной запятой. В обычной нотации функция обозначает количество выводимых цифр. Точность, установленная по умолчанию, равна 6. Функция width() воздействует только на один вывод информации, а после этого в действие вступают параметры принятые по умолчанию. В случае с остальными двумя функциями новые установки остаются действовать до их явного обновления. Приведем пример: cout.width(10); cout.fill('*'); cout<<123<<"\n"; cout.width (10); cout<<456<<"\n\n"; cout<<"Using precision\n"; float price1 = 20.405f; float price2 = (float)1.9+8.0/9.0; cout<<price1<<"\n"<<price2<<"\n\n"; cout.precision(2); cout<<price1<<"\n"<<price2<<"\n\n"; cout.setf(ios::scientific); cout<<price1<<"\n"<<price2<<"\n\n"; Выведет на экран *******123 *******456 Using precision 20.405 2.78889 20 2.8 2.04e+001 2.79e+000 Манипуляторы являются специальными функциями, которые позволяют изменять флаги потока. Существуют манипуляторы с параметрами и без. Если Вы используете манипуляторы с параметрами, подключите файл iomanip.h Рассмотрим манипуляторы без параметров: ends - помещает в выходной поток нулевой символ; endl помещает в выходной поток символ конца строки и вызывает метод flush; flush выгружает буфер потока; dec , hex, oct устанавливают основания 10, 16 и 8 соответственно; Манипуляторы с параметрами setbase (int b) задает основание системы счисления; resetiosflags (long f) сбрасывает флаги, указанные в параметре; setiosflags (long f) устанавливает флаги, указанные в параметре; setfill (int ch) задает заполняющий символ; setprecision (int n) задает точность вещественных чисел; Выведет на экран ***22 b 149) Функторы в C++ являются сокращением от "функциональные объекты". Функциональный объект является экземпляром класса С++, в котором определён operator(). Если вы определите operator() для C++ класса, то вы получите объект, который действует как функция, но может также хранить состояние. Например, #include <iostream> #include <string> class SimpleFunctor { std :: string name_; Public : SimpleFunctor ( const char *name) : name_(name) {} void operator ()() { std :: cout << "Oh, hello, " << name_ << endl; } }; int main() { SimpleFunctor sf( "catonmat" ); sf(); // выводит "Oh, hello, catonmat" } Public : EvenOddFunctor () : even_( 0 ), odd_( 0 ) {} void operator ()( int x) { if (x% 2 == 0 ) even_ += x; else odd_ += x; } int even_sum() const { return even_; } int odd_sum() const { return odd_; } }; int main() { EvenOddFunctor evenodd; int my_list[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; evenodd = std ::for_each (my_list, my_list+sizeof(my_list)/ sizeof (my_list[ 0 ]), evenodd); std :: cout << " Сумма чётных : " << evenodd.even_sum() << "\n" ; std :: cout << " Сумма нечётных : " << evenodd.odd_sum() << std ::endl ; // вывод: // Сумма чётных: 30 // Сумма нечётных: 25 } Здесь экземпляр EvenOddFunctor передается в for_each. for_each итерируется по каждому элементу в my_list и вызывает функтор. После этого он возвращает копию функтора evenodd, который содержит сумму чётных и нечётных элементов. Вызов функции. Концепция типа данных Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип. Тип данных определяет: внутреннее представление данных в памяти компьютера; множество значений, которые могут принимать величины этого типа; операции и функции, которые можно применять к величинам этого тина. Все типы языка C++ можно разделить на основные и составные. В языке C++ определено шесть основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы. Основные типы данных в C++ Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова: 1. int (целый); 2. char (символьный); 3. wchar_t (расширенный символьный); 4. bool (логический); 5. float (вещественный); |
Последнее изменение этой страницы: 2019-04-10; Просмотров: 231; Нарушение авторского права страницы