Инструкции C++
Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--; Формат: switch (выражение) { case константа: набор операторов; break; … default: набор операторов; } Инструкция выбора
Циклы С предусловием: while (условие) оператор; С постусловием: do оператор; while (условие); Пересчетного типа: for(инициализация;условие;приращение)оператор;
Инструкции перехода break; Пример: for(int I=0; I0) continue; goto loop_exit; } loop_exit: … Инструкция безусловного перехода Формат: goto метка; Используется только в случаях крайней необходимости! break; }
Функции Функция до её использования должна быть описана или объявлена в виде (имена параметров игнорируются): Прототип_функции; Функция должна быть описана только один раз в виде: Прототип_функции { тело_функции } Формат прототипа: Тип_возвращаемого_значения имя(список_параметров) Формат списка параметров: тип имя_аргумента,…,тип имя_аргумента Функцию можно определить со спецификатором inline inline int fac(int n) {return (n
Возвращаемое значение Любая функция, если она не объявлена как void, должна возвращать значение. Это значение задается в инструкции return выражение; - инициализации неименованной переменной возвращаемого типа. Функция может иметь несколько инструкций return. Если функция не возвращает значения, то выражение в инструкции return может быть пустым или вызовом функции типа void.
Пример. int fac(int n) { if(n>1) return n*fac(n-1); return 1; } Ошибка. int* fp(void) {int& fr(void) { int local=1; return &local; return local; }} Возвращается адрес локальной переменной, которая будет уничтожена. Значение, на которое будет указывать этот адрес, будет меняться непредсказуемо!
Передача аргументов По значению void val(int i) { i++; } void main() { int k=0; val(k); cout
Функции с неопределенным числом аргументов #include #include int average( int first,... ); void main() { cout
Аргументы функции main #include void main(int n,char* s[]) {cout
Полиморфизм – один интерфейс, множество методов void print(long);// печать целого void print(char*);// печать символьной строки void print(float);// печать вещественного Проблема: print(10); 1.Не требуется преобразования типа (int и const int). 2.Существует стандартное преобразование типа с расширением точности (int в long). 3.Тоже с возможной потерей точности (double в int). 4.Преобразование типа определено пользователем. 5.С переменным числом аргументов.
Указатель на функцию #include double I(double a,double b,int n,const double (&F)(double)) {double h=(b-a)/n--,s=(F(a)+F(b))/2; while(n--) s+=F(a+=h); return s*h; } double f(double x) { return x; } void main() {cout
Макросы Расширение исходного кода #include #include имя_файла Вставить определение Определить константу #define имя_макроса список_лексем #define va_list void* #define sqr(x) (x)*(x) #define имя константа #define array_size 128 NB!#define sqr(x) x*x A=sqr(a+b); // A=a+b*a+b; Условной компиляции #if#ifdef#ifndef … #else#elif … #endif
Библиотечные функции #include #define eof (-1) int getchar(void); int putchar(int); int printf(char*,…); int scanf(char*,…); #include double sin(double); double cosh(double); double exp(double); double sqrt(double); double pow(double,double); #include #define NULL 0 char* strcpy(char*, const char*); int strcmp(const char*,const char*); int strlen(const char*); char* strstr(const char*,const char*); #include int getch(void); int getche(void); int putch(int); void gotoxy(int,int);
От проектирования процедур к организации данных #include struct complex { double re,im; }; void main(void) {complex a; a.re=1.; a.im=2.; cout
Инкапсуляция #include struct complex { double re,im; void assign(double r,double i) { re=r; im=i; } void print(void); }; void complex::print(void) { cout
Сокрытие данных #include struct complex { private: double re,im; public: void assign(doble r,double i) { re=r; im=i; } void print(void); }; void complex::print(void) { cout
Конструкторы class complex { double re,im; public: complex(double r=0.,double i=0.) { re=r; im=i; } void print(void) const; }; void complex::print(void) const { cout
Преобразование типов class complex { double re,im; public: complex(double r=0.,double i=0.) { re=r; im=i; } operator double() { return sqrt(re*re+im*im); } void print(void) const; }; void complex::print(void) const { cout
Перегрузка операторов class complex { double re,im; public: complex(double r=0.,double i=0.) { re=r; im=i; } operator double() { return sqrt(re*re+im*im); } complex operator +(double b){ return complex(re+b,im); } complex operator+(complex a) { return complex(a.re+re,a.im+im); } void print() const { cout
Дружественные функции class complex { double re,im; public: complex(double r=0.,double i=0.) { re=r; im=i; } operator double() { return sqrt(re*re+im*im); } friend complex operator+(double,complex); complex operator +(double b){ return complex(re+b,im); } complex operator+(complex a) { return complex(a.re+re,a.im+im); } void print() const { cout
Перегрузка оператора
Пример