Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
void SetBehavior<TBehavior>()
#include <iostream>
using namespace std;
class a {
public:
static int var; // объявление статической переменной типа int
};
int a::var=5; // определение переменной в глобальном пространстве имён
int main() {
a obj;
cout<<a::var; // вывод значения переменной, обращаемся к ней через класс
// выведется 5
cout<<obj.var; // вывод значения переменной, обращаемся к ней через объект класса
// выведется 5
return 0;
}
#include <iostream>
using namespace std;
class A {
public:
int x;
A(int a) {
x = a;
}
void f() {
cout << x;
}
void f() const { // перегружаем функцию f для возможности работы с
cout << x; //константными объектами
}
};
int main() {
A a1(2);
a1.f(); // выполнение f для объекта a1
A const a2(4);
a2.f(); // выполнение f для константного объекта а2
return 0;
}
Перегрузка методов класса происходит так же, как и перегрузка других методов.
Исполльзуются перегруженные методы для возможности работы с различными типами
данных.
Пример:
#include <iostream>
using namespace std;
class A {
public:
static int subtract(int a, int b) // версия целочисленного типа
{
return a - b;
}
Один класс может наследовать атрибуты двух и более классов одновременно. Наличие
у производного класса более чем одного непосредственного базового класса
называется множественным наследием. Синтаксически множественное наследование
отличается от единичного наследования списком баз, состоящим более чем из одного
элемента. Каждый из базовых классов отделен от других запятой. Общая форма
множественного наследования имеет вид:
Одно и то же имя класса не может входить более одного раза в список баз при
объявлении производного класса. Это означает, что в наборе непосредственных
базовых классов, которые участвуют в формировании производного класса не должно
встречаться повторяющихся элементов. Вместе с тем, один и тот же класс может
участвовать в формировании нескольких (а может быть и всех) непосредственных
базовых классов данного производного класса. Так что для непрямых базовых классов,
участвующих в формировании производного класса не существует никаких
ограничений на количество вхождений в объявление производного класса.
try {
// try-блок, подлежащий проверке на наличие ошибок
}
catch (type1 arg) {
// catch-блок (обработчик исключения типа type1);
}
catch (type2 arg) {
// catch-блок (обработчик исключения типа type2);
// . . .
catch (typeN arg){
//catch-блок (обработчик исключения типа typeN);
}
try-блок может включать в себя несколько инструкций некоторой функции или охватывать
весь код функции main().
throw exception;
#include<iostream>
using namespace std;
int main()
{
cout<< “НАЧАЛО\n”;
try{
cout << “В try-блоке\n”;
throw 99; //генерирование ошибки
cout<< “Эта инструкция не будет выполнена.”;
}
catch (int i) {
cout<<”Перехват исключения. Его значение равно“;
cout << i << “\n”;
}
cout << “КОНЕЦ”;
return 0;
}
Результат:
НАЧАЛО
В try-блоке
КОНЕЦ
Здесь try-блок содержит три инструкции, инструкция catch (int i)предназначена для обработки
исключений целочисленного типа. В этом try-блоке выполняется только две из трёх
инструкции: cout и throw. После генерирования исключения управление предается catch-
выражению, при этом выполнение try-блока прекращается.
Обычно при выполнении catch-блока делается попытка исправить ошибку путем выполнения
соответствующих действий. Если ошибку можно исправить, то после выполнения catch-блока
управление программой передается инструкции, следующей за этим блоком. В противном
случае программа должна быть прекращена.
Адаптер объектов
Эта реализация использует композицию: объект адаптера «оборачивает», то есть
содержит ссылку на служебный объект. Такой подход работает во всех языках
программирования.
Аналогия из жизни
Когда вы звоните в магазин и делаете заказ по телефону, сотрудник службы поддержки
является вашим фасадом ко всем службам и отделам магазина. Он предоставляет вам
упрощённый интерфейс к системе создания заказа, платёжной системе и отделу
доставки.
16. Понятие паттернов проектирования. Паттерн
Шаблонный метод.
Шаблон проектирования или паттерн в разработке программного обеспечения —
повторяемая архитектурная конструкция, представляющая собой решение проблемы
проектирования в рамках некоторого часто возникающего контекста.
Паттерн Шаблонный метод задаёт “скелет” алгоритма в методе, оставляя определение
реализации некоторых шагов подклассам (субклассам). Субклассы могут переопределять
некоторые части алгоритма без изменения его структуры.
Основной задачей паттерна является создание шаблона алгоритма. Шаблон алгоритма - это
метод, определяющий алгоритм в виде последовательности шагов. Один или несколько
шагов определяются в виде абстрактных методов, реализуемых субклассами. Таким образом
гарантируется неизменность структуры алгоритма при том, что часть реализации
предоставляется субклассами.
class Money {
public:
int rub;
int kop;
if (resultKop < 0) {
resultRub = resultRub - 1;
resultKop = 100 + resultKop;
}
Money result = Money(resultRub, resultKop);
return result;
int main() {
Money gumPrice = Money(5, 0);
Money paid = Money(5, 0);
Money change = paid - gumPrice;
cout << change.rub << "." << change.kop << endl;
if (paid == gumPrice) {
cout << "true" << endl;
} else {
cout << "false" << endl;
}
}