С++ Язык программирования С++ был разработан на основе языка С Бьярном Страуструпом (Bjarne Stroustrup).

Презентация:



Advertisements
Похожие презентации
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Advertisements

Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
©ρŧą Базовые конструкции языка.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
C++ - занятие 2 1. Какие типы вы бы использовали? height // рост salary // зарплата за месяц (в рублях) grade// средний балл charshort longint unsigned.
Потоки Язык C++ не обеспечивает средств для ввода/вывода Ему это и не нужно; такие средства легко и элегантно можно создать с помощью самого языка Традиционно.
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
1 Программирование на языке Си++. 2 Модуль 1. ТИПЫ ДАННЫХ, ОПЕРАЦИИ И ФУНКЦИИ В Си++ Ссылочный тип данных Операции расширения контекста, new, delete Встроенные.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

С++ Язык программирования С++ был разработан на основе языка С Бьярном Страуструпом (Bjarne Stroustrup).

С++ На первых порах (1980 год) язык носил условное название «С с классами», а в 1983 году Рик Массити придумал название «С++» Предшественники С++: C – BCPL – SIMULA 67 – Алгол 68 С++ является надмножеством С, поэтому программы написанные на Си, могут обрабатываться компилятором языка С++

На сегодняшний день язык Си++ является одним из наиболее универсальных языков программирования. Его использование лежит, в основном, в области создания высокоэффективных приложений пользовательского уровня, работающих со сложными динамическими структурами данных. Многие из таких приложений могут быть созданы средствами других языков, таких как Java, Perl или Phyton. Но быстродействие результирующего кода, созданного компиляторами с языка Си++, находится вне конкуренции с кодом вышеперечисленных языков.

C++ как улучшенный С Лучший метод перевести программу с С на С++ просто перекомпилировать ее и проследить все появляющиеся ошибки

Отличие C++ от С

1. аргументы, используемые по умолчанию 2. ссылки 3. параметры-ссылки 4. функция, возвращающая значение типа ссылки 5. встроенные функции 6. операция :: 7. перегруженные функции 8. определение переменных 9. константные значения 10. имена-этикетки в enum, struct и union 11. анонимные объединения 12. гибкие операторы распределения памяти

1. Аргументы, используемые по умолчанию void ShowMessage(char *msg, int x=0, int y=0); void ShowMsg( int x, int y=0, char *msg); //неверно ShowMessage( Error: Out of Memory,,10); //неверно ShowMessage( Error: Out of Memory ); ShowMessage( Error: Out of Memory,10);

2. Ссылки #include int value=10; int &refval=value; int main(void) { printf( value = %d \n, value); refval +=5; // Модификация через ссылку printf( value = %d \n,value); // 15 printf( Адрес value равен %p \n, &value ); printf( Адрес refval равен %p \n, &refval ); // Одинаково return(0); }

3. Параметры-ссылки #include void Inc_val(int i) { i++; } // Получает параметр значением. Модификация не // влияет на оригинал void Inc_ptrl(int *i) { (*i)++; } // Получает адрес оригинала. Модифицирует // оригинал путем косвенной адресации void Inc_ref(int &i) { i++; } // Получает параметр ссылку. Модифицирует // оригинал !!!!! int main(void) { int j=10; printf( J равняется %d\n,j); Inc_val(j); printf( j=%d\n ),j); Inc_ptr(&j); printf( j=%d\n ),j); Inc_ref(j); printf( j=%d\n ),j); return(0); }

4. Функция, возвращающая значение типа ссылки #include const int arraySize=0xF; static int valArray[arraySize]; int& valueAt(int indx) { return valArray[indx]; } int main(void) { for (int i=0; i

5. Встроенные (inline) функции #include inline void swap(int &i, int &j) { i ^= j ^= i ^= j; } // ^= присвоение исключающего или (выполняется справа налево) int main(void) { int a=10, b=20; printf( a=%d, b=%d \n,a,b); swap(a,b); printf( a=%d, b=%d \n,a,b); return 0; }

Борланд С++ не допускает inline-расширений для функций: применяющих операторы while, do/while, switch/case, for, goto; имеющих тип void и не содержащих оператора return; применяющих встроенный код ассемблера.

Компилятор выдаст сообщение об ошибке int i, j; int min(int i1, int i2); // прототип int main(void) { return min(i, j); } // Вызов inline int min(int i1, i2) { return i1 > i2 ? i2 : i1; } // Определение

Компилятор не выдаст сообщение об ошибке int i, j, k, l; inline int max(int i1, int i2); // прототип int func1(void){return max(i, j);} // не расширяется как inline inline int max(int i1, i2) { return i1 > i2 ? i1 : i2; } int func2(void) {return max(i, j);} // расширяется как inline !!!

6. Операция :: #include int total=10; // Глобальная переменная int main(void) { int total=100; // Локальная переменная во внешней области действия if (total > 0) { int total = 1000; // Локальная переменная во внутренней области printf( Локальная total %d\n,total); printf( Глобальная total %d\n,::total); } return 0; }

7. Перегруженные функции #include void ShowMessage(int); void ShowMessage( char *msg); void ShowMessage(int errCode) { printf(«MSG: %s\n, sys_errlist[errCode]);} void ShowMessage(char *msg) { printf(«MSG: %s\n»,msg); } int main(void) { ShowMessage(1); // 1: Недействительный номер функции ShowMessage ( Ошибка исправлена ); return 0; }

Функции, отличающиеся только типом возвращаемого значения, не могут быть перегружены. Следующий код вызовет ошибку: int getCustInfo(char *name); char *getCustInfo(char *name); Функции не могут быть перегружены, если их параметры различаются только применением модификаторов const или volatile, или использованием ссылки. void DelRec(int indx); void DelRec(int &indx); void DelRec(const int indx); void DelRec(volatile int indx);

Ниже показаны некоторые внутренние имена перегруженных функций: void func(int int func(int void func(char void func(char

8. Определения переменных #include int main(void) { printf( Привет!\n ); int i; printf( Значение i= %d \n, i); for ( int j=0; j

9. Константные значения const double pi = ; const char plus = '+'; Описание const гарантирует, что его значение не изменится в области видимости: const int model = 100; model = 145; // ошибка model++; // ошибка

10. Имена-этикетки в enum, struct и union enum Account {edu, corp, persnl }; enum { ASM, AUTO, BREAK }; struct custInfo { char name[80]; long accntNum; Account AccType; // вместо enum Account AccType }; custInfo c={ FD, Ltd.,100,corp}; // без ключа struct

11. Анонимные объединения #include static union { char custName[80]; // Глобальное объединение long custId; }; int main(void) { union { int newId; // Локальное объединение int counter; }; for (counter=0; counter

12. Гибкие операторы распределения памяти #include long *lptr; void f1(void) { lptr=(long* )malloc(sizeof(long)); *lptr=0x1000; printf( Значение равно %d\n, *lptr); free(lptr); } void f2(void) { lptr=new long; *lptr=0x1000; printf( Значение равно %d\n, *lptr); delete lptr; }

set_new_handler – определяемая пользователем процедура обработки ошибок #include void MyNewHandler( ) { printf( Нет памяти!\n ); } int main(void) { set_new_handler(MyNewHandler); // Установит новый обработчик.. return 0; }

Переопределение new[ ] и delete[ ] void* operator new(size_t); void* operator new[ ](size_t); void operator delete(void*); void operator delete[ ](void*); #include void* operator new(size_t size) // перекрыть глобальную операцию { printf( new( ) запрашивает %d байт \n,size); return malloc(size); } void operator delete(void *p) // перекрыть глобальную операцию { printf( delete() \n ); free(p); }