Содержание
- 2. Инкапсуляция при программировании классов Инкапсуляция данных при программировании классов – доступ к свойствам через методы Достоинства
- 3. Правила умолчания в С++ Присваивание объектов одного и того же типа (побитовое копирование памяти) Создание объекта
- 4. Проблема инварианта представления Инвариант представления для строки типа String – наличие терминального байта – не выполнен
- 5. Проблемы инкапсуляции Для классов с динамическим управлением памятью предопределенные в С++ операции будут вызывать проблемы Пример
- 6. Проблема снимается перегрузкой операции присваивания для аргумента типа класса typename& operator=( const typename& ) конструкторами класса
- 7. const int max_string_length = 128; class String { public: String( ) ; // конструктор по умолчанию
- 8. Определение присваивания #include “mystring.h” #include // использование: s = “Hello World” String& String::operator=(const char* s )
- 9. Конструктор по умолчанию и пустой деструктор #include “mystring.h” // Конструктор по умолчанию обеспечивает инвариант // представления
- 10. Конструкторы Конструктор – особая функция-член класса имя совпадает с именем класса не возвращает значения неявно вызывается
- 11. Деструктор Деструктор – особая функция-член класса имя образуется из тильды “~” и имени класса не возвращает
- 12. Вызов конструкторов и деструкторов #include “mystring.h” #include String s_extrn ; static String s_stat ; void example(
- 13. Инициализация Отличие инициализации и присваивания Пример int i = 7; // инициализация int k; k =
- 14. Конструкторы и инициализация Инициализацию обеспечивает конструктор Пример Класс complex должен иметь такие конструкторы: complex ( double
- 15. Пример для класса String #include “mystring.h” #include void main ( int, char*[ ] ) { String
- 16. Класс может не иметь конструктора. В этом случае создание объекта состоит в выделении памяти под структуру
- 17. Конструктор без аргументов называется конструктором по умолчанию Конструктор с аргументом типа класса называется копирующим конструктором Конструктор
- 18. Расширение класса String const int max_string_length = 128; class String { public: String() ; String( const
- 19. Дополнительные конструкторы #include “mystring.h” #include // Конструктор с параметром String::String( const char* s) { strncpy( text,
- 20. Свойства – данные типа класса Класс может иметь члены-данные типа класса. #include “mystring.h” class Employee {
- 21. Создание объекта типа Employee включает в себя создание свойства name типа String Класс String имеет конструктор,
- 22. Если у класса нет операции присваивания, то присваивание объектов типа Employee происходит по правилам умолчания, т.е.
- 23. Если у класса нет копирующего конструктора, то инициализация объектов типа Employee происходит по правилам умолчания, т.е.
- 24. Разрушение объекта типа Employee включает в себя разрушение свойства name типа String Класс String имеет деструктор,
- 25. Пример использования #include “employee.h” int main ( int, char*[ ] ) { String jones = “Jones”
- 26. Подмена встроенных операций Класс-владелец может иметь свои операцию присваивания конструктор по умолчанию копирующий конструктор конструктор с
- 27. Подмена встроенных операций #include “mystring.h” class Employee { public: Employee( ); Employee( const Employee& ); Employee(
- 28. Определение операций #include “Employee.h” Employee::Employee( ) { } Employee::Employee( const Employee& e ) : name(e.name), salary(e.salary)
- 29. Определите семантику вызовов #include “employee.h” int main ( int, char*[ ] ) { String jones =
- 30. Ответ #include “employee.h” int main ( int, char*[ ] ) { String jones = “Jones” ;
- 31. РЕЗЮМЕ Язык С++ имеет все средства обеспечения при программировании класса полного контроля над свойствами объекта Для
- 33. Скачать презентацию