Особенности Си++ (Лысачёв П.С. Лекции по Си++ ) Лекция 2
Primary tabs
Отличительные черты Си++
- Регистро-зависимый
- Контроль типов
- Перегрузка операторов
- Классы, объекты, наследование
- Конструкторы, Деструкторы
- Inline, Темплейты
- Исключения
Типы данных
- 1) bool
- 2) char, signed char, unsigned char
- 3) short, signed short, unsigned short
- 4) int, signed int, unsigned int
- 5) long, signed long, unsigned long
- 6) float, double, long double
- 7) void
Новые типы
определять так:
typedef тип новый_тип;
Примеры:
typedef unsigned int size_t; typedef size_t count_t; size_t n = 100; count_t c = n;
Диапазоны значений типов
- bool
- signed char, char
- unsigned char
- signed short
- unsigned short
- signed long
- unsigned long
- long = int
- true, false
в соответствии с номерами предыдущего списка:
- true, false
- -2^4 … 2^4
- 0 … 2^8
- -2^8 … +2^8
- 0 … +2^16
- -2^16 … +2^16
- 0 … +2^32
Объявление типов
- 1) int i;
- 2) unsigned int k, K;
- 3) char ch; double d;
- 4) int m = 10;
- 5) char e, c = ‘b’;
- 6) bool b = false;
- 7) int* p1, p2; ( int* p1; int p2)
- 8) const int b = 100;
Операции
- ++
- --
- -=
- +=
- *=
- /=
- %=
- ?:
в соответствии с номерами предыдущего списка:
- увеличение на 1
- уменьшение на 1
- вычитание с присваиванием
- cложение …
- умножение …
- деление …
- остаток от деления …
- при условии (a > b ? 1 : 0)
Приоритеты операций
1) int b = 5;
b += 6; ( b = b + 6;)
2) int i = 1;
int b = i++; (b = 1, i =2);
int c = ++i; (b = 2, I = 2);
3) int i = 0;
Не делать: ++i++;
(i+=2);
Условный оператор if
if ( выражение1 ) операция1; else if(выражение2) операция2; …. else операцияN;
Примеры
1) if(a<b) b =1;
2) if(a<b) {a=2; b=5;}
3) if(a<b) b = 1; else {b = 0;}
4) if(a<b) b=2; else if (a>b) b=10; else b=0;
int a = 1; int b =1;
5) if(a++) b++; ( a = 2, b = 2)
6) if(++a) b++; ( a = 2, b = 2)Условный оператор switch
switch( выражение)
{
case константа1: операция; break;
case константа2: {операции;} break;
…
default: операция; break;
}Примеры
int a = 1; int b = 3; int c = 5; int d = 10;
int x = a;
switch(x) {
case 1: x++; break;
case 3: x++;
case 5: x++; break;
default: x--; break;
}
Оператор цикла while
while ( выражение ) оператор;
примеры:
int a = 10;
while( 0 != a) a--; ( a = 0, [10 … 0] )
while( 0 != a) {--a;} ( a = 0, [10 … 0] )
while( 0 != a--); ( a = -1, [10 … 0] )
while( 0 != --a); ( a = 0, [9 … 0] )Оператор цикла do while
do оператор; while (выражение);
пример:
int a = 10
do
{
a--; // эта или иные операции
} while(0 != a); ( a = 0, [9 … 0] )Оператор цикла for
for(инициализация; выражение;операции) оператор; // то есть оператор который предполагается выполнять в теле цикла
например:
for (int i = 0; i < 10; i++) ; ( i = 9, [0 … 9] )
int b = 2; for (int i = 0; i < 100 && 0 != b; i++) b--;
( b = 0, I = 2);
Операторы передачи управления
- goto
- break
- continue
- return
Массивы
int buf[128]; int bbuf[100][128]; char str[] = “Строка”;
Пример:
int m[4] = {10, 15, 20, 30};
int sum = 0;
for(int i =0; i < 4; i++) sum += m[i];Указатели
тип (*имя) (список_аргументов); int (*func) (double, double);
тип* имя; int* a, b, *c; void* имя; void* p;
чем отличается указатель от ссылки
Ссылки
тип& имя;
Пример:
int i;
i = 5;
int& r = i;
r = 10;
--------------------
int m[4] = {1, 2, 3, 4};
int* p = m;
int** pp = &p;
int m2 = p[2]; ( 3 элемент)
int m2 = *(p+2);
int i;
- 1) int* p = &i;
- 2) int* pp = p;
- 3) void* vp = (void*)p;
- 4) int* const cp = &i;
- 5) const int* const ccp = &i;
- 6) int* np = NULL;
- 7) int* zp = 0;
Операции с указателями
int m[4] = {1, 2, 3, 4};
unsigned int* p = m;
unsigned int* d = p;1) p++;
2) int i = p – d; ( i = 1, p = m[1])
4) *p = 4; (m {1, 4, 3, 4} )
5) p+=2; p--;
Операции с указателями
- 1) const char* cp = “Строка”; char* p = (char*)cp;
- 2) p++;
- 3) int* ip = (int*)cp;
- 4) ip++;
Строки, Символы
- 1) “Строка1” “Строка1\nСтрока2”
- 2) ‘c’, ‘0’, ‘\0’
Примеры:
- 1) char* str = “Строка1”; ( const char*)
- 2) char ch = ‘c’;
- 3) char ch1 = *str; ( ch1 = ‘C’);
Операции со строками
char* str = “Строка”;
1)int* ip = (int*)str;
ip++; ( *ip == ‘о’)
Нельзя: *ip = ‘м’;
2)char* cp = str;
cp++; (*cp == ‘т’)
Нельзя: *cp = ‘м’;
Перебор строки си++
сhar* p = “Строка”; while(*p) p++;
printf() функция - примеры:
printf(“Строка\n”); printf(“%s\n”, “Строка”); printf(“%s %i\n”, “Строка”, 100); printf(“%s %i%c”, “Строка”, 100, ‘\n’);
Структура программы (функции)
void func()
{
}
int func1(void)
{
return 5;
}
bool func2(bool b);
…
bool func2(bool b)
{
return !b
}Передача объекта
void func(string* p, string& r, string s)
{
*p += 5;
r +=5;
s +=5;
}
string s;
func(&s, s, s);Перегрузка функций
void func(int i)
{
printf(“%i\n”, i);
}
void func(char c)
{
printf(“%c\n”, c);
}
func(10);
func(‘c’);
func((int)‘c’);ещё пример:
void func(const char* p)
{
printf(“1: %s\n”, p);
}
void func(char* p)
{
printf(“2: %s\n”, p);
}
Структуры
struct [имя_типа] {
тип1 переменная1;
тип2 переменная2;
………
};
struct {
тип1 переменная1;
тип2 переменная2;
………
} [объекты];Примеры структур
struct String {
const char* p;
size_t len;
};
String s;
String s = {“Str”, 3};
struct {
const char* p;
size_t len;
} s;
struct {
const char* p;
size_t len;
} s = {“Str”, 3};- Log in to post comments
- 4414 reads