C++ Пространства имен namespace
Пространства имен namespace Иногда при написании кода, особенно разными программистами могут использоваться одинаковые названия функций и переменных, чтобы не было конфликтов их можно «облачить» в пространство имен (namespace) это что-то вроде «принадлежности» к чему либо. Например создадим пространства имен FirstNS и SecondNS внутри которых будут как одинаковые, так и разные имена функций/переменных/классов. namespace FirstNS { […]
C++ Перечисляемый тип enum
Перечисляемый тип enum Иногда нужно создать перечисления состояний или набор констант, для более удобного обращения используется перечисляемый тип enum, по сути это структура/класс созданная только для целочисленных значений, ну или же набор define т.к. при компиляции произойдет замена enum на числа. Синтаксис для enum: enum NameEnum { CONST_0, // CONST_0=0 CONST_1, // CONST_1=CONST_0+1=1 […]
40. C++ Генерируем свои исключения. Свой класс exception
Генерируем свои исключения. Свой класс exception Как было показано ранее для обработки исключений может использоваться базовый класс exception, но в ряде случаев требуется расширить его функционал или написать для собственного класса или типов данных, поэтому создается класс-наследник от этого базового класса: class MyException : public exception { public: MyException(char* msg, int codeError) : exception(msg) […]
39. C++ Несколько блоков catch.
Несколько блоков catch. Иногда мы можем иметь несколько вариантов возвращаемого значения у throw, для них мы можем написать несколько различных блоков catch для обработки исключений try { func(); } catch (const int Exception_code) { //обработка ошибки 1 } catch (const char* Exception_code) { //обработка ошибки 2 } catch (const exception& ex) { //обработка ошибки 3 […]
38. C++ Генерация исключений с++. Throw c++
Генерация исключений с++. Throw c++ При работе блока try catch могут генерироваться и бросаться исключения с ключевым словом throw, мы также можем его использовать в своих функциях, методах и тд. Например: void func () { int Ex_code; code1() { // если ошибка Ex_code=1; throw Ex_code; } code2(){ // если ошибка Ex_code=2; throw […]
37. C++ Обработка исключений. Блоки try catch
Обработка исключений. Блоки try catch При выполнении кода могут возникать ошибки, некоторые из них м.б. трудно прогнозируемыми, маловероятными и тд, чтобы программа не вылетала, а выдавала осмысленный результат что произошло и используются блоки обработки исключений (причин почему программа не работает). Для этого используется блок try catch, рассмотрим на примере как он работает: try { code1(); […]
36. C++ Перегрузка операторов ввода/вывода
Перегрузка операторов ввода/вывода Классы cin/cout и ifstream / fstream, ofstream, являются наследниками классов ostream/istream, поэтому можем использовать следующие перегрузки для public полей string Name; и unsigned int age; класса Person; Person c_Person; ostream& operator <<(ostream& os, const Person& c_Person) { os<<”Name: ”<<c_Person.Name<<”\n”; os<<”Age: ”<<c_Person.age<<”\n”;; return os; } istream& operator <<(istream& is, Person& c_Person) { […]
C++ Работа с файлами
Работа с файлами В C++ для работы с файлами используется библиотека «fstream» благодаря ней мы можем создать классы (ifstream, fstream, ofstream), являющиеся потомками класса istream/ostream и позволяющие работать с потоками ввода/вывода (в данном случае под словом поток имеется в виду поток Байт). Примечание: cin/cout итакже являются наследниками класса istream/ostream. #include <fstream> Для ввода русских символов […]
35. C++ Виртуальное множественное наследование (ромбовидное наследование)
Виртуальное множественное наследование (ромбовидное наследование) В предыдущей теме (множественное наследование) мы создавали классы студента и работника и наследовали от них класс работающего студента, при этом все поля классов были различными. Представим, что у нас было бы более сложное наследование, например: классы студент и работник наследуются от класса Person (содержащего имя) и от этих классов (студент […]
34. C++ Множественное наследование
Множественное наследование Одной из отличительных особенностей языка C++ является множественное наследование, при таком наследовании класс наследник может получить поля и методы от 2-х и более классов родителей. Рассмотрим на примере: Пусть у нас будут базовые классы студент и работник и класс наследник работающий студент. class Student { public: Student () { this->Name=»Ivan»; this->course=1; } void […]