Содержание
- 2. Преимущества и недостатки ООП Преимущества (при создании больших программ): использование при программировании понятий, более близких к
- 3. Свойства ООП Инкапсуляция - скрытие деталей реализации; объединение данных и действий над ними. Наследование позволяет создавать
- 4. Технология разработки ОО программ В процесс проектирования перед всеми остальными добавляется еще один этап - разработка
- 5. Описание класса class { [ private: ] public: }; Поля класса: могут иметь любой тип, кроме
- 6. внутри локального класса запрещается использовать автоматические переменные из области, в которой он описан; локальный класс не
- 7. class monstr{ int health, ammo; public: monstr(int he = 100, int am = 10) { health
- 8. Описание объектов monstr Vasia; monstr Super(200, 300); monstr stado[100]; monstr *beavis = new monstr (10); monstr
- 9. константный объект: const monstr Dead (0,0); Константный метод: int get_health() const {return health;} Константный метод: объявляется
- 10. /*Новый метод для класса monstr ,возвращает ссылку на наиболее здорового (поле health ) (нужно поместить в
- 11. Конструкторы Конструктор не возвращает значение, даже типа void. Нельзя получить указатель на конструктор. Класс может иметь
- 12. Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по
- 13. имя_класса имя_объекта [(список параметров)]; имя_класса (список параметров); имя_класса имя_объекта = выражение; monstr Super(200, 300), Vasia(50), Z;
- 14. enum color {red, green, blue}; class monstr{ int health, ammo; color skin; char *name; public: monstr(int
- 15. monstr::monstr(int he, int am) {health = he; ammo = am; skin = red; name = 0;}
- 16. monstr::monstr(int he, int am): health (he), ammo (am), skin (red), name (0){ } Конструктор копирования T::T(const
- 17. monstr::monstr(const monstr &M){ if (M.name){ name = new char [strlen(M.name) + 1]; strcpy(name, M.name);} else name
- 18. Статические поля Память под статическое поле выделяется один раз class A{ public: static int count; /*
- 19. Статические методы class A{ static int count;//поле count -скрытое public: static void inc_count(){ count++; } };
- 20. Дружественные функции и классы Дружественная функция объявляется внутри класса, к элементам которого ей нужен доступ, с
- 21. class monstr; //Предъявар.объявление класса class hero{ public: void kill(monstr &); }; class monstr{ friend int steal_ammo(monstr
- 22. Дружественные классы - пример Если все методы класса должны иметь доступ к скрытым полям другого, весь
- 23. Деструкторы Деструктор вызывается автоматически, когда объект выходит из области видимости: для локальных объектов — при выходе
- 24. Деструктор: не имеет аргументов и возвращаемого значения; не может быть объявлен как const или static; не
- 25. Перегрузка операций . .* ?: :: # ## sizeof при перегрузке операций сохраняются количество аргументов, приоритеты
- 26. Функцию-операцию можно определить: как метод класса как дружественную функцию класса как обычную функцию Формат: тип operator
- 27. Перегрузка унарных операций 1. Внутри класса: class monstr{ ... monstr & operator ++() {++health; return *this;}
- 28. 2. Как дружественную функцию: class monstr{ ... friend monstr & operator ++( monstr &M); }; monstr&
- 29. class monstr{ ... monstr operator ++(int){ monstr M(*this); health++; return M; } }; monstr Vasia; cout
- 30. Перегрузка бинарных операций 1. Внутри класса: class monstr{ ... bool operator >(const monstr &M){ if( health
- 31. Перегрузка операции присваивания операция-функция должна возвращать ссылку на объект, для которого она вызвана, и принимать в
- 32. Перегрузка операций new и delete им не требуется передавать параметр типа класса; первым параметром функциям new
- 33. class Obj { … }; class pObj{ … private: Obj *p; }; pObj *p = new
- 34. Перегрузка операции приведения типа operator имя_нового_типа (); monstr::operator int(){ return health; } ... monstr Vasia; cout
- 35. Перегрузка операции вызова функции class if_greater{ public: int operator () (int a, int b) const {
- 36. Перегрузка операции индексирования class Vect{ public: explicit Vect(int n = 10); //инициализация массивом: Vect(const int a[],
- 37. Vect::Vect(int n) : size(n){ p = new int[size];} Vect::Vect(const int a[], int n) : size(n){ p
- 38. void Vect::Print(){ for (int i = 0; i cout int main(){ int arr[10] = {1,2, 3,
- 39. Указатели на элементы классов Указатель на метод класса: возвр_тип (имя_класса::*имя_указателя)(параметры); описание указателя на методы класса monstr
- 40. Правила использования указателей на методы классов: Указателю на метод можно присваивать только адреса методов, имеющих соответствующий
- 41. Указатель на поле класса тип_данных(имя_класса::*имя_указателя); В определение указателя можно включить его инициализацию: &имя_класса::имя_поля;//Поле должно быть public
- 42. Вложенные классы Внутри класса допускается описание новых классов. Описания этих классов будут доступны только внутри текущего
- 43. Как правило, класс как тип, определенный пользователем, должен содержать скрытые (private) поля и следующие функции: конструкторы,
- 44. Интерфейс и реализация Клиент – часть программы, которая создает и использует объекты классы Открытый интерфейс класса
- 45. Продолжение примера // конструктор класса Cat, Cat::Cat(int initialAge) { itsAge = initialAge; std::cout } Cat::~Cat() //
- 46. // реализация открытой функции доступа SetAge, void Cat::SetAge(int age) {itsAge = age;} //реализация метода Meow выводит
- 48. Скачать презентацию