Содержание
- 2. 5.1 Описание класса и создание объектов Формат описания класса: class { private: ; protected: ; public:
- 3. Пример 5.1. Класс Книга СBook +Name; +Pages; +getName() +getPages() main.cpp Book.h Book.cpp Использует Реализует Объявление класса
- 4. Объявление класса Файл Book.h: #ifndef Book_h #define Book_h class СBook { public: char Name[30]; int Pages;
- 5. Описание методов в специальном файле // Файл Book.cpp – секция реализации модуля book #include "book.h" //
- 6. Объявление неинициализированных объектов при отсутствии в классе конструктора Объявление объектов: ; Пример: #include "book.h" int main()
- 7. Инициализация общедоступных полей объектов при объявлении в случае отсутствия в класса конструктора Для инициализации общедоступных полей
- 8. Обращение к полям и методам класса а) простой объект: . б) указатель на объект: -> в)
- 9. Основная программа #include "book.h" #include int main() { // объявление инициализированного объекта CBook B={"J.London. Smoke Bellew",267};
- 10. 5.2 Конструкторы и деструкторы Конструктор – метод, автоматически вызываемый при выделении памяти под объект. Используется для
- 11. Конструкторы без параметров Конструкторы, как и другие функции, можно перегружать. Специальный конструктор без параметров (инициализирующий или
- 12. Делегирующие конструкторы Начиная с С++11, одни конструкторы класса (делегирующие) могут вызывать другие, объявленные в том же
- 13. Автоматически генерируемые методы. default Начиная с С++11 для класса автоматически генерируются следующие методы: конструктор по умолчанию:
- 14. Различные способы создания объектов Пример (Ex5_4): class CPoint { private: int x,y; public: CPoint(int ax,int ay){x=ax;y=ay;}
- 15. Распределение/освобождение памяти и инициализация объектов в программе A.SetPoint(2,3); A.Print(); B.Print(); for (i=0;i for(i=0;i E=new CPoint(3,4); E->Print();
- 16. Список инициализации. Инициализация объектных полей Формат элемента списка инициализации: ( ) Примеры: a) TPoint(int ax,ay): x(ax),y(ay)
- 17. Объекты с динамическими полями. Деструкторы Деструкторы аналогично конструкторам вызываются автоматически, но в момент освобождения памяти, выделенной
- 18. Копирующий конструктор Автоматически вызывается: а) при использовании объявлений типа TPoint A(2,5),B=A; б) при передаче параметров-объектов по
- 19. Пример обязательного определения копирующего конструктора (Ex5_05) #include class TNum { public: int *pn; TNum(int n){puts("new pn");
- 20. Дескриптор explicit Дескриптор указывается, когда необходимо точное соответствие формальных и фактических параметров при вызове конструктора. Пример.
- 21. Запрет использования конструктора delete Дескриптор указывается, когда необходимо запретить использование конвертации типов при вызове конструктора. Пример.
- 22. 5.3 Наследование class [final]: {…}; Если указано, то запрещает дальнейшее наследование
- 23. Конструкторы и деструкторы производных классов A():[ ]{…} B():A(), {} C():B(), {} A B C При объявлении
- 24. Пример наследования Ex5_02 (PrintBook.h) #ifndef printbook_h #define printbook_h #include "Book.h" class CPrintBook:public CBook{ private: int PrintPages;
- 25. Вызов конструкторов и деструкторов для объектов производных классов (Ex5_06) #include class TNum { public: int n;
- 26. 5.4 Полиморфизм. Полиморфное наследование Полиморфизм «Чистый» Переопределение методов в иерархии Параметрическая В пространствах имен Простой (статический)
- 27. Полиморфное наследование В Паскале: простой полиморфизм сложный полиморфизм Пример использования сложного полиморфизма (Ex5_03): В С++: переопределение
- 28. Объявление класса СBook (файл Book.h) #ifndef book_h #define book_h #include #include class CBook { protected: char
- 29. Класс CBook (файл Book.cpp) #include "Book.h" int CBook::getPages() { return Pages; }
- 30. Класс CPrintBook (файл PrintBook.h) #ifndef printbook_h #define printbook_h #include "Book.h" class CPrintBook:public CBook{ private: int PrintPages;
- 31. Класс CPrintBook (файл PrintBook.cpp) #include "Book.h" int CPrintBook::getPages(){ return PrintPages; }
- 32. Основная программа #include "PrintBook.h" int main() { CBook F("J.London. Smoke Bellew",267); F.Print(); CPrintBook D("J.London. Smoke Bellew",267);
- 33. Дескрипторы override и final Дескрипторы используются для предоставления дополнительной информации компилятору. Совокупность аспектов виртуального метода или
- 34. Уточняющие описания override и final class A{ public: virtual void func(){} // исходные аспекты виртуальных методов
- 35. Абстрактные методы и классы Абстрактный метод. class AClass { … virtual int Fun(int,int)=0; } Класс, содержащий
- 36. Использование пространств имен для перегрузки методов класса (Ex5_09) #include class A{ public: void func(int ch); };
- 37. 5.5 Константные объекты и перегрузка методов для них С++ разрешает создавать константные объекты, например: const a(1);
- 38. Перегрузка методов для константного объекта (Ex5_10) #include using namespace std; class A { private: int x;
- 39. 5.6 Приведение типов объекта В С++ для приведения типов используют: ( ) - используется в Си/С++
- 40. Пример приведения типов объектов (Ex5_07) #include #include class TA { protected: char c; public: TA(char ac):c(ac){}
- 41. Пример приведения типов объектов(2) int main(int argc, char* argv[]) { TA *pA=new TA('A'),*pC=new TB("AB"); TB *pB=new
- 42. 5.7 Контейнер «Двусвязный список» (Ex5_08) Диаграмма классов
- 43. Контейнер «Двусвязный список»(2) Диаграмма компоновки
- 44. Файл Element.h #include class TElement { public: TElement *pre,*suc; TElement() { pre=suc=NULL;} virtual ~TElement(); virtual void
- 45. Файл Element.cpp #include "Element.h" TElement::~TElement() { puts("Delete TElement."); } TSpisok::~TSpisok() { puts("Delete TSpisok"); while ((cur=Del())!=nullptr) {
- 46. Файл Element.cpp (2) TElement *TSpisok::Del(void) { TElement *temp=last; if (last!= nullptr) {last=last->pre; if (last!=nullptr) last->suc=nullptr; }
- 47. Файл Num.h #include "Element.h" class TNum:public TElement { public: int num; TNum(int n):TElement(),num(n) {} ~TNum() override;
- 48. Файл Num.cpp #include "Num.h" TNum::~TNum() { puts("Delete TNum."); } void TNum::Print() { printf("%d ",num); } TChar::~TChar()
- 49. Тестирующая программа #include "Num.h" #include #include int main() { TSpisok N; char str[10]; int k,i; TElement
- 51. Скачать презентацию