Краткий конспект языка С++
Описание файла
PDF-файл из архива "Краткий конспект языка С++", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
студентыфизики2013unkonnСтудент физфакаИсточникиhttp://ofvp.phys.msu.ru/science_education/lections/CS/cp_menu.htmlПо материалам семинаров Панова Н.А. в 1 и 2 семестрах.Краткий конспект СиБиблиотеки#include<stdio.h>#include<conio.h>#include<math.h>#include<cmath>#include<time.h>#include<stdlib.h>#include<iostream>#include<fstream>////////////////standard input/output: header, printf, scanf, файлыgetch() – ожидание нажатия клавишиматематическая библиотека: abs()математическая библиотека c++работа с датой, временем: time()srand, RAND_MAX, malloc, freecin, cout. (добавить также using namespace std;)потоки в файлыОсновная часть программыint main { … ; return 0; }void main { … ; }Автозамена текста программы(C)#define N 10#define sqr(x) (x*x)// замена компилятором части кодаПример ошибки#define sqr(x) x*x// отсутствие скобок.
Тогда y=sqr(a+b); y=a+b*a+b;(C++)const float N=20;inline <тип_возвр_зн> sqr(float x) { return x*x }объединение операторов{ <оп>; <оп>; … }Описание переменных<тип> <пер1>,<пер2>=<знач>, … ; в любом месте программы, до появления соответствующейпеременнойintцелый тип, 4 байта (-4*10^9…4*10^9)floatтип с плавающей точкой, 4 байтаdoubleтип с плавающей точкой двойной точности, 8 байтcharсимвольный тип c='b'+1; - следующий в кодировке после «b» символchar[N]массив типа char (строковой тип)char b[N][M] массив типа charint a[N]массив a[0],…,a[N-1] переменных типа intint a[2] = {11, 2};Некотрые операцииx=5;присваивание типа intx=5.0; x=5.; присаивание типа floati++; или ++i; или i=i+1;i--; или --i; или i=i-1;i+=5;или i=i+5;Особые операции для int:/ деление нацело (5/2=2)% остаток от деления (5%2=1)Особые операции для float/double:/ обыкновенное деление (5./2.=2.5) (5./2=2.5) (5/2.=2.5)abs(x); возвращение модуля xПреобразование типовx=b; неявно (=float, b=int)x=float(b); или x=(float)b; (=float, b=int)float=int к float можно неявно присвоить intint=float к int нельзя неявно присвоить floatВвод/выводОбычный ввод/вывод(C)#include<stdio.h>scanf("<строка>",&<пер1>,&<пер2>,пример scanf("%d%lf",&a,&b)printf("<строка>"[,<пер1>,<пер2>,printf("Hello world");printf("a=%i b=%i c=%f\n",x,y,z);Потоки (C++)#include<iostream>using namespace std;cout << “x=” << x << “y=” << y <<cout.precision(1); число значащихcin >> b;Типы во вводе/выводе и оформление\nпереход на новую строку\tтабуляция%d, %i int...);//ввод...]);// вывод ([] - необязательно)endl;цифр в экспоненциальной записи(C,C++)%f%lf%c%sfloatdouble; %.xlf – x цифр после запятойcharchar[N]Логические операции0ложь!0истина!a(!0 1, !5 0)a&&bи (0&&0 !0&&0 0&&!0 0; !0&&!0 1)a||bили (0&&0 0; !0&&0 0&&!0 !0&&!0 1)==равно!=не равно>=, <=, >, <Условный оператор (по возможности избегать)if(<число>) <оп1 !0>; else <оп2 0>;//условный оператор.
Число представлется как логическаяпеременная.switch(x)//оператор выбора{case 5: <оп>; break;case 1: <оп>; break;default <оп>;}//остальные случаи (аналог else)Циклыwhile (<усл>) <оп>;// с предусловиемdo <оп> while (<усл>);// с постусловием. По возможности избегатьfor(<оп1>;<усл>;<оп2>) <оп>;// с предусловием. Если в <оп> хотите несколько операций,отделяйте их запятой без точки.<оп1>; for(;;) { if(<усл>) break; else <оп> }; // или даже так – без параметров в for()Файлы#include<stdio.h>FILE*<файлоая переменная>;<файл пер>=fopen("<file name>","<способ>");// связь файла и переменной для открытия:Способы:w - открыть для записиr - открыть для чтенияa -открыть для добавления в конецfprintf(<файл пер>,"%d",i);// запись в файлfscanf(<файл пер>,"%c",&c);// чтение из файлаfclose(<файл пер>);// закрыть.
Файлы нужно закрывать.feof(<файл пер>);// функция конца файла (конец =1, не конец =0)файлы в потокиofstream file2;fistream file1;file1.open("NewFileIn.txt");file2.open("NewFileOut.txt");file1 >> x ;file2 << "Enter";file1.close();file2.close();// создать потоковый объект класса. ofstream - для записи// создать потоковый объект класса. ifstream - для чтения////////связать объект с именем файлачтение из потокавывод в поток файлазакрыть файлФункцииОписываются до блока mainТипы (по типу выводимого значения)voidвозвращает ничтоint; double возвращает соответствующий тип<тип выдаваем знач> <имя функц>(<перем>);// глобальные переменныеint abc(<тип1> <пер1>,<тип2> <пер2>, … ){int a,b,c;// локальные переменныеm=11;// использование глобальной переменнойreturn x; }// возвращение значения функцииabc(a,b+17);// вызов функциипрототипы (если функция вызывается до своего объявления)void B();// прототипvoid A() { B() }// без прототипа функция A не видела бы Bvoid B() { A() }// без прототипа функция B видит AЗначения функций по умолчаниюvoid Show(int i=10, int j=0){cout << i+j; }void main(){Show (1,2); // 3Show(1);// 1Show(); }// 10Динамическая памятьsrand(time(NULL));x=rand()пр x=rand()%aпр x=(b-a)*rand()/RAND_MAX+a;// случайное число в диапазоне [0;RAND_MAX]// случайное число в диапазоне [0;a-1]// случайное число в диапазоне [a;b]Ca=(<тип>*)malloc(N*sizeof(<тип>)); // динамический массив переменных типа <тип> размера Nb=(int*)malloc((end-beg+1)*sizeof(int));free(a);// очистка динамической памятиC++a=new <тип>[<размер>];// динамический массив переменных типа <тип>delete a;// очистка динамической памятиСтруктураТип переменных, введенный пользователем.struct <имяструк>{<тип> <пер1>;<тип> <пер1>;…};<имяструк> <пер>;// объявление переменной типа <имяструк><имяструк> *<указ>=<пер1>;// объявление указателя на <пер1> типа <имяструк><пер>.<пер1>=11;// доступ к полю <пер1> переменной <пер> типа <имяструк><указ> -> <пер1>=4;// доступ к полю <пер1> переменной <пер> типа <имяструк>через указательпример структуры с указателями (для создания стека):struct type{int x;// поле с переменной типа inttype *p;// поле с указателем на переменную типа type};type *last = new type;// объявление указателя типа typetype *temp = new type;// то жеtype *nd = new type;// то жеlast->p = NULL;// очистка указателяnd->p = last;// писваиване полю p в указателе ndscanf("%d",&(nd->x));//last = nd;// копирование содержимогоУказателисодержат адрес на ячейку памяти<тип>* <указ>;// объявление указателя<указ>=&<пер>;// & - взятие адреса <пер> и запись в указатель*<указ>=6; или <пер>=6;// * - доступ к значению переменной по адресу в указателе.*<указ>=NULL;// в никудаdelete <указ>;// удаление указателяОсобый доступ к массивам:int a[N];*a=6; a[0]=6;*(a+2)=7; a[2]=7;int *p=new int[size];//создание массива типа int размером size элементов с помощьюуказателяДвумерные указателиint **p;p=new int*[yy];for (y=0;y<yy;y++){p[y]=new int[xx];p[y][x]=3;for (int y=0;y<yy;y++)delete p;//создание массива ссылок p[y]}//объявление элемента p[y] массива ссылок как массив// p[y][x]; *(*(p+y)+x);delete p[y];// очисткаСсылки (C++)Ссылка – вид указателя («псевдоним» переменной, второе имя ячейки памяти).Привязывается только к переменной<тип> &<ссыл>;объявление ссылки<ссыл>=<пер>;<ссыл>++; или <пер>++;Полиморфизм.
Перегрузка функций (C++)Функции с различными по типу аргументами различны. Выбор происходит в зависимости от типааргументов:intsum(int a, int b){ return a+b; }//(1)float sum(float a, float b) { return a+b; }//(2)sum(c,d);// (1). c,d - intsum(c,d);// (2). c,d – floatИнкапсуляция. Класс (C++)Инкапсуляция - Объединение данных и методов их обработки в рамках одного типаКласс – тип, в который объединяются данные и методы. Частный случай класса – структураЭкземпляр класса – объектclass matrix// объявление класса matrix{private:// видны изнутри класса (локальные) (можно не использовать)int x,y;public:// видны везде (глобальные)matrix(int,int);// конструкторmatrix(matrix &);// конcтруктор копийmatrix operator+(matrix);// переопределение +friend matrix operator*(matrix, matrix); // переопределение * через дружественнуюфункцию.void show();// прототип метода~matrix();// деструктор.
Вызывается автоматически при закрытии};matrix::matrix(int y1=3, int x1=4)// конструктор. 3,4 – значения по умолчаию{ … }matrix::matrix(matrix &orig)//конструктор копий.{x=orig.x; }void matrix::show(){cout << x << “ “ << y << }matrix matrix::operator+(matrix v)// переопределение +{v.x+=this->x;// this - указ на объект, для которого вызван методreturn v; }matrix operator*(matrix u, matrix v)// переопределение * через дружественную{… ; return matr; }matrix::~matrix()// деструктор{delete p; }void main(){matrix A;// вызов matrix со значениями параметров по умолчаниюmatrix B(m,n);// вызов matrix с пользовательскими значениями параметровA.show();(A+B).show(); }// вывод матрицы A+B на экран в соответствии с определением плюсаНаследование. Виртуальные классы (C++)class A{public:virtual void solve()=0; };/* virtual - виртуальная функция, =0 - в описании не нуждается.
Класс с виртуальной функцией –виртуальный класс, не создающий своих объектов. */class B: public A// класс наследует свойства класса A и также свои{};class integral: public A, public B//множественное наследование{};int main(){ return 0; }Обработка исключенийtry// область возможного существования исключений{throw 1;// (1)throw "ERROR"; }// (2)catch(char *s){cout << s;//exit(0);}// выход из программыcatch(int *k){cout << k;}//(1) отправка значения 1 в ближайший catch с типом int и преход к концу блока try//(2) отправка значения ERROR в ближайший catch с типом string.