Особенности Си++ (Лысачёв П.С. Лекции по Си++ ) Лекция 2

Отличительные черты Си++

  • Регистро-зависимый
  • Контроль типов
  • Перегрузка операторов
  • Классы, объекты, наследование
  • Конструкторы, Деструкторы
  • 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;

Диапазоны значений типов

  1. bool
  2. signed char, char
  3. unsigned char
  4. signed short
  5. unsigned short
  6. signed long
  7. unsigned long
  8. long = int
  9. true, false

в соответствии с номерами предыдущего списка:

  1. true, false
  2. -2^4 … 2^4
  3. 0 … 2^8
  4. -2^8 … +2^8
  5. 0 … +2^16
  6. -2^16 … +2^16
  7. 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. ++
  2. --
  3. -=
  4. +=
  5. *=
  6. /=
  7. %=
  8. ?:

в соответствии с номерами предыдущего списка:

  1. увеличение на 1
  2. уменьшение на 1
  3. вычитание с присваиванием
  4. cложение …
  5. умножение …
  6. деление …
  7. остаток от деления …
  8. при условии (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);

Операторы передачи управления

  1. goto
  2. break
  3. continue
  4. 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};

Key Words for FKN + antitotal forum (CS VSU):