Содержание
- 2. 5.1 Описание класса Формат описания класса: class { private: ; protected: ; public: ; }; Пример:
- 3. Пример описания класса (файл Slovo.h) class TSlovo { private: int Len; char *Ref; protected: int Pos;
- 4. Пример описания методов (файл Slovo.cpp) #include "stdafx.h" #include "slovo.h" #include #include TSlovo::TSlovo(char *ref,int pos):Pos(pos) { Len=strlen(ref);
- 5. 5.2 Объявление объектов и обращение к полям ; Примеры: а) TPoint a,*b, c[5]; /* класс описан
- 6. Тестирующая программа #include "stdafx.h" #include #include ″Slovo.h" int main(int argc, char* argv[]) { TSlovo Greet("Hello World",6);
- 7. 5.3 Наследование class : {…};
- 8. Пример наследования Ex5_02 (Text.h) #include "f:\iva\primer.vc\lection\oopr1\slovo.h" #include class TText:public TSlovo { private: int Pos; public: TText(char
- 9. Тестирующая программа #include "stdafx.h" #include "Text.h" int main(int argc, char* argv[]) { TText Greet("Hello World",6); char
- 10. 5.4 Полиморфизм Полиморфизм «Чистый» Переопределение методов в иерархии Параметрическая В пространствах имен Простой полиморфизм Сложный полиморфизм
- 11. Полиморфизм В Паскале: простой полиморфизм сложный полиморфизм Пример использования сложного полиморфизма (Ex5_03): #include "stdafx.h" #include "f:\iva\primer.vc\lection\oopr11\Ttext.h"
- 12. Использование пространств имен для перегрузки методов класса (Ex5_111) #include "stdafx.h" #include class A { public: void
- 13. 5.5 Инициализация общих полей объектов при отсутствии конструкторов Пример: class TPoint {public: int x,y; ...}; int
- 14. 5.6 Конструкторы. Список инициализации Пример (Ex5_4): class TPoint { private: int x,y; public: TPoint(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 TPoint(3,4); E->Print();
- 16. Список инициализации. Инициализация объектных полей Формат элемента списка инициализации: ( ) Примеры: a) TPoint(int ax,ay): x(ax),y(ay)
- 17. 5.7 Копирующий конструктор Автоматически вызывается: а) при использовании объявлений типа TPoint A(2,5),B=A; б) при передаче параметров-объектов
- 18. Пример обязательного определения копирующего конструктора (Ex5_05) #include "stdafx.h" #include class TNum { public: int *pn; TNum(int
- 19. 5.8 Конструкторы и деструкторы производных классов A(){…} B():A(), {} C():B(), {} A B C При объявлении
- 20. Вызов конструкторов и деструкторов для объектов производных классов (Ex5_06) #include "stdafx.h" #include class TNum { public:
- 21. 5.9 Абстрактные методы и классы Абстрактный метод. class AClass { … virtual int Fun(int,int)=0; } Класс,
- 22. 5.10 Множественное и виртуальное наследование class : virtual { ...}; Порядок вызовов конструкторов: конструктор виртуально наследуемого
- 23. Пример множественного виртуального наследования #include "stdafx.h" #include class TA { protected: int Fix; public: TA() {
- 24. Пример множественного виртуального наследования (2) class TC:virtual private TA { public: int Two; TC() { cout
- 25. 5.11 Приведение типов объекта В С++ для приведения типов используют: 1) ( ) - используется в
- 26. Пример приведения типов объектов (Ex5_07) #include "stdafx.h" #include #include class TA { protected: char c; public:
- 27. Пример приведения типов объектов(2) int main(int argc, char* argv[]) { TA *pA=new TA('A'),*pC=new TB("AB"); TB *pB=new
- 28. 5.12 Контейнер «Двусвязный список» (Ex5_08) Диаграмма классов
- 29. Контейнер «Двусвязный список»(2) Диаграмма компоновки
- 30. Файл Element.h #include class TElement { public: TElement *pre,*suc; TElement() { pre=suc=NULL;} virtual ~TElement() { puts("Delete
- 31. Файл Element.cpp #include "stdafx.h" #include "Element.h" TSpisok::~TSpisok() { puts("Delete TSpisok"); while ((cur=Del())!=NULL) { cur->Print(); delete(cur); }
- 32. Файл Element.cpp (2) TElement *TSpisok::Del(void) { TElement *temp=last; if (last!=NULL) {last=last->pre; if (last!=NULL) last->suc=NULL; } if
- 33. Файл Num.h #include "Element.h" class TNum:public TElement { public: int num; TNum(int n):TElement(),num(n) {} ~TNum() {
- 34. Тестирующая программа #include "stdafx.h" #include "Num.h" #include #include TSpisok N; int main(int argc, char* argv[]) {
- 35. Тестирующая программа(2) p=N.First(); k=0; while (p!=NULL) { if (TNum *q=dynamic_cast (p)) k+=q->num; // установить создание RTTI
- 36. 5.13 Статические компоненты класса Объявляются с описателем Static Статические поля являются общими для всех объектов класса
- 37. Статические компоненты класса (Ex5_09) Пример. Создать список объектов Файл Statico.h #include #include class TPoint { public:
- 38. Файл Statico.cpp #include "stdafx.h" #include "statico.h" TPoint *TPoint::first=NULL,*TPoint::last=NULL; TPoint::TPoint(char ach1,char ach2) { ch1=ach1; ch2=ach2; next=NULL; if(first==NULL)first=this;
- 39. Тестирующая программа #include "stdafx.h" #include "statico.h" int main(int argc, char* argv[]) { TPoint A('S','C'),B('W','O'),C('M','S'); if(TPoint::first!=NULL) TPoint::DrawAll();
- 40. 5.14 Дружественные функции и классы Описываются с описателем friend, что обеспечивает доступ к внутренним компонентам класса
- 41. 5.15 Переопределение операций Операции Типы функций-операций: 1. Независимая функция-операция а) operator@( ) б) operator@( , )
- 42. Переопределение операций 1. Можно переопределять только операции, параметры которых –объекты. 2. Не разрешается переопределение *, sizeof,
- 43. Пример 1. Класс «Точка» (Ex5_10) Файл Tpoint.h #include class TPoint{ private: float x,y; public: TPoint(float ax,float
- 44. Файл Tpoint.cpp #include "stdafx.h" #include "Tpoint.h" TPoint& TPoint::operator+=(TPoint &p) { x+=p.x; y+=p.y; cout return *this; }
- 45. Тестирующая программа #include "stdafx.h" #include "Tpoint.h" int main(int argc, char* argv[]) { TPoint p(2,3),q(4,5),r(7,8); p+=r; p.Out();
- 46. Пример 2. Класс «Строка»(Ex5_11) Файл S.h: #include #include #include #include class String { private: char *str,name;
- 47. Файл S.cpp #include "stdafx.h" #include "s.h" String::String(int Len,char Name){ len=Len; str=new char[len+1]; str[0]='\0'; name=Name; cout }
- 48. Файл S.cpp (2) String::String(String &S) { len=S.Length(); str=new char[len+1]; strcpy(str,S.str); name='K'; cout } String::~String() { delete
- 49. Файл S.cpp (3) String String::operator+(String &A) { cout String S(j,'S'); strcpy(S.str,str); strcat(S.str,A.str); cout return S; }
- 50. Файл S.cpp (3) String& String::operator=(String &S) { cout if (str!=NULL) delete[]str; str=new char[len+1]; strcpy(str,S.str); cout return
- 51. Тестирующая программа #include "stdafx.h" #include "s.h" int main(int argc, char* argv[]) { String A("ABC",'A'),B("DEF",'B'),C(6,'C'); C.print(); C=A+B;
- 52. Выполнение операций
- 53. 5.16 Параметризованные классы (шаблоны) Формат описания шаблона класса: template Формат объявления объектов: ( ) Пример. Динамический
- 54. Файл A.h #include template class TArray { type * content; int size; public: TArray(int asize) {
- 55. Тестирующая программа #include "stdafx.h" #include "A.h" #include int main(int argc, char* argv[]) {int i; TArray int_a(5);
- 56. 5.17 Параметризованные функции Формат описания шаблона функции: template Пример. Шаблон функции определения максимального (Ex5_13) #include "stdafx.h"
- 57. Тестирующая программа int main(int argc, char* argv[]) { int a=1,b=2; char c='a', d='m'; float e=123, f=456;
- 58. Контейнер на основе шаблона (Ex5_14) contents
- 59. Объявление шаблона класса #include template class arrayob { type **contents; int size; int n; public: arrayob(int
- 60. Объявление шаблона функции template arrayob ::~arrayob () {for(int i=0;i delete [] contents; } contents num num
- 61. Файл N.h #include #include class TNum { public: int num; TNum(int n):num(n) {} virtual ~TNum(void) {cout
- 63. Скачать презентацию