Лекция 9. Введение в ООП. Часть 2 Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2008.

Презентация:



Advertisements
Похожие презентации
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Advertisements

Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 16. Введение в ООП. Часть 7 Красс Александр СПбГУ ИТМО, 2008.
Лекция 15. Введение в ООП. Часть 6 Красс Александр СПбГУ ИТМО, 2008.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Лекция 22. Шаблоны (часть 2) Красс Александр СПбГУ ИТМО, 2008.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Лекция 7. Введение в ООП через практику. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Лекция 5. Подготовка к ООП Красс Александр СПбГУ ИТМО, 2008.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 12. Контрольная работа Красс Александр СПбГУ ИТМО, 2008.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Лекция 31. Динамическая информация о типе Красс Александр СПбГУ ИТМО, 2009.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Объектно-ориентированное программирование С++. Лекция 8 Карпов В.Э.
Лекция 1. Введение Красс Александр СПбГУ ИТМО, 2008.
Лекция 2. Фундаментальные типы данных и основные конструкции Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008

2 Темы Статические члены класса Практика или что успеем

3 Статические члены класса Статические переменные Статические методы

4 Статические переменные Бывают ситуации, когда нужно, чтобы некоторые данные были общими для всех объектов одного класса, в таких случаях используют статические переменные.

5 Статические переменные static тип имя Переменной; Например: static int i; struct Car { char *model; static int count; // Число всех }; // автомобилей

6 Статические переменные struct Car { static unsigned int count; public: Car() { ++count; } };

7 Статические переменные struct Car { static unsigned int count; public: Car() { ++count; } }; unsigned int Car::count = 0;

8 Статические переменные cout << Car::count << endl; Car bmvX6; cout << Car::count << endl; Car audiTT; cout << Car::count << endl;

9 Статические переменные cout << Car::count << endl; // 0 Car bmvX6; cout << Car::count << endl; // 1 Car audiTT; cout << Car::count << endl; // 2

10 Статические переменные struct A { A() { cout << "A()" << endl; } }; struct B { static A a; B(); }; B::B() { cout << "B()" << endl; } A B::a; // или A B::a = A(); void main() { B b; }

11 Статические переменные struct A { A() { cout << "A()" << endl; } }; struct B { static A a; B(); }; B::B() { cout << "B()" << endl; } A B::a; // или A B::a = A(); void main() { // A() B b; // B() }

12 Статические переменные Статические данные инициализируются до запуска функции main.

13 Статические методы Статические методы могут быть вызваны без создания объектов класса, к которому они принадлежат. Статические методы могут обращаться только к статическим полям класса. Конструкторы и деструкторы не могут быть статическими.

14 Аналог int count = 0; void func() { cout << count++ << endl; } void main() { func(); // 0 func(); // 1 func(); // 2 }

15 Пример class Counter { public: static int count; public: static void func() { cout << count++ << endl; } }; int Counter::count = 0; void main() { cout << Counter::func() << endl; // 0 cout << Counter::func() << endl; // 1 cout << Counter::func() << endl; // 2 }

16 Пример class Counter { public: static int count; public: static void func() { cout << count++ << endl; } }; int Counter::count = 0; void main() { cout << Counter::func() << endl; // 0 cout << Counter::func() << endl; // 1 cout << Counter::func() << endl; // 2 } А заметили ли Вы ошибку?

17 Пример class Counter { public: static int count; public: static void func() { cout << count++ << endl; } }; int Counter::count = 0; void main() { cout << Counter::func() << endl; // 0 cout << Counter::func() << endl; // 1 cout << Counter::func() << endl; // 2 } А заметили ли Вы ошибку?

18 Пример class Counter { public: static int count; public: static void func() { cout << count++ << endl; } }; int Counter::count = 0; void main() { Counter::func(); }

19 Статические методы class Имя Класса {... static Тип ВозвращаемогоЗначения Имя Метода(Список аргументов);... };

20 Статические методы class Car { static unsigned int count; public: Car() { ++count; } static unsigned int GetCount() { return count; } }; unsigned int Car::count = 0;

21 Статические методы cout << Car::GetCount() << endl; // 0 Car bmvX6; cout << Car::GetCount() << endl; // 1 Car audiTT; cout << Car::GetCount() << endl; // 2

22 Домашнее задание 9.1 class String { // Напишите здесь код }; void main() { String str1("AAA"); String str2("BBB"); str1.add(str2); cout << str1.chars(); // AAABBB cout << str1.length(); // 6 cout << str1.substr(2, 5); // AAABBB cout << str1.find("AB"); // 2 cout << str1.find("C"); // -1 cout << str1.find("AA"); // 0 cout << String::find(str1, "AB"); // 2 // Для продвинутых (9.2) Удаление пробелов в конце строки (trim) Изменение регистра символов строки

23 Спасибо за внимание Вопросы?