🗊Презентация Объекто-ориентированное программирование

Нажмите для полного просмотра!
Объекто-ориентированное программирование, слайд №1Объекто-ориентированное программирование, слайд №2Объекто-ориентированное программирование, слайд №3Объекто-ориентированное программирование, слайд №4Объекто-ориентированное программирование, слайд №5Объекто-ориентированное программирование, слайд №6Объекто-ориентированное программирование, слайд №7Объекто-ориентированное программирование, слайд №8Объекто-ориентированное программирование, слайд №9Объекто-ориентированное программирование, слайд №10Объекто-ориентированное программирование, слайд №11Объекто-ориентированное программирование, слайд №12Объекто-ориентированное программирование, слайд №13Объекто-ориентированное программирование, слайд №14Объекто-ориентированное программирование, слайд №15Объекто-ориентированное программирование, слайд №16Объекто-ориентированное программирование, слайд №17Объекто-ориентированное программирование, слайд №18Объекто-ориентированное программирование, слайд №19Объекто-ориентированное программирование, слайд №20Объекто-ориентированное программирование, слайд №21Объекто-ориентированное программирование, слайд №22Объекто-ориентированное программирование, слайд №23Объекто-ориентированное программирование, слайд №24Объекто-ориентированное программирование, слайд №25Объекто-ориентированное программирование, слайд №26Объекто-ориентированное программирование, слайд №27Объекто-ориентированное программирование, слайд №28Объекто-ориентированное программирование, слайд №29Объекто-ориентированное программирование, слайд №30Объекто-ориентированное программирование, слайд №31Объекто-ориентированное программирование, слайд №32Объекто-ориентированное программирование, слайд №33Объекто-ориентированное программирование, слайд №34Объекто-ориентированное программирование, слайд №35Объекто-ориентированное программирование, слайд №36Объекто-ориентированное программирование, слайд №37Объекто-ориентированное программирование, слайд №38Объекто-ориентированное программирование, слайд №39Объекто-ориентированное программирование, слайд №40Объекто-ориентированное программирование, слайд №41Объекто-ориентированное программирование, слайд №42

Содержание

Вы можете ознакомиться и скачать презентацию на тему Объекто-ориентированное программирование. Доклад-сообщение содержит 42 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1






Введение
Описание слайда:
Введение

Слайд 2





Парадигмы программирования 
Структу́рное программи́рование
Функциона́льное программи́рование
Логи́ческое программи́рование 
Автома́тное программи́рование
Объе́ктно-ориенти́рованное программи́рование 
Событи́йно-ориенти́рованное программи́рование
Агентно-ориентированное программи́рование
Описание слайда:
Парадигмы программирования Структу́рное программи́рование Функциона́льное программи́рование Логи́ческое программи́рование Автома́тное программи́рование Объе́ктно-ориенти́рованное программи́рование Событи́йно-ориенти́рованное программи́рование Агентно-ориентированное программи́рование

Слайд 3





Объекто-ориентированное программирование 
Объекто-ориентированное программирование 
Использует в качестве  основных логических конструктивных элементов объекты, а не алгоритмы
Каждый объект является экземпляром (instance) определенного класса (class); 
Классы образуют иерархии
Описание слайда:
Объекто-ориентированное программирование Объекто-ориентированное программирование Использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы Каждый объект является экземпляром (instance) определенного класса (class); Классы образуют иерархии

Слайд 4





Элементы объектной модели
• Абстракция 
• Инкапсуляция 
• Модульность 
• Иерархия 
• Контроль типов 
• Параллелизм 
• Персистентность
Описание слайда:
Элементы объектной модели • Абстракция • Инкапсуляция • Модульность • Иерархия • Контроль типов • Параллелизм • Персистентность

Слайд 5







Преимущества объектной модели

стимулирует повторное  использование не только кода, но и проектных решений
приводит к созданию систем с устойчивыми промежуточными формами, что упрощает их изменение. 
уменьшает риски,  связанные с проектированием сложных систем.
учитывает особенности процесса познания.
Описание слайда:
Преимущества объектной модели стимулирует повторное использование не только кода, но и проектных решений приводит к созданию систем с устойчивыми промежуточными формами, что упрощает их изменение. уменьшает риски, связанные с проектированием сложных систем. учитывает особенности процесса познания.

Слайд 6


Объекто-ориентированное программирование, слайд №6
Описание слайда:

Слайд 7







Класс  - это множество объектов, имеющих общую структуру и общее поведение.
Описание слайда:
Класс - это множество объектов, имеющих общую структуру и общее поведение.

Слайд 8


Объекто-ориентированное программирование, слайд №8
Описание слайда:

Слайд 9





Ограничения доступа
Описание слайда:
Ограничения доступа

Слайд 10


Объекто-ориентированное программирование, слайд №10
Описание слайда:

Слайд 11





Основные свойства и правила использования конструкторов: 
Основные свойства и правила использования конструкторов: 
конструктор имеет то же имя, что и класс, в котором он объявляется; 
конструктор не возвращает значения (даже типа void); 
конструктор не наследуется в производных классах. 
 конструктор может иметь параметры, заданные по умолчанию; 
конструктор - это функция, но его нельзя объявить с ключевым словом virtиal;
невозможно получить в программе адрес конструктора; 
если конструктор не задан в программе, то он будет aвтоматически сгенерирован;
конструктор вызывается автоматически только при описании объекта; 
объект, содержащий конструктор, нельзя включить в виде компонента в объединение; 
конструктор класса Х не может иметь параметр типа Х, может иметь параметр   ссылку на объект типа Х, в этом случае  он называется конструктором для копирования (сору constrиctor) класса Х.
Описание слайда:
Основные свойства и правила использования конструкторов: Основные свойства и правила использования конструкторов: конструктор имеет то же имя, что и класс, в котором он объявляется; конструктор не возвращает значения (даже типа void); конструктор не наследуется в производных классах. конструктор может иметь параметры, заданные по умолчанию; конструктор - это функция, но его нельзя объявить с ключевым словом virtиal; невозможно получить в программе адрес конструктора; если конструктор не задан в программе, то он будет aвтоматически сгенерирован; конструктор вызывается автоматически только при описании объекта; объект, содержащий конструктор, нельзя включить в виде компонента в объединение; конструктор класса Х не может иметь параметр типа Х, может иметь параметр ссылку на объект типа Х, в этом случае он называется конструктором для копирования (сору constrиctor) класса Х.

Слайд 12





Основные свойства и правила использования деструкторов: 
Основные свойства и правила использования деструкторов: 
деструктор имеет то же самое имя, что и класс, в котором он объявляется, с префиксом ~ (тильдой); 
деструктор не возвращает значения ; 
 деструктор не наследуется в производных классах; 
производный класс может вызвать деструкторы для его базовых классов; 
деструктор не имеет параметров; 
класс может иметь только один деструктор; 
деструктор - это функция, и он может быть виртуальным;
 невозможно получить в программе адрес деструктор); 
если деструктор не задан в программе, то он будет автоматически сгенерирован компилятором; 
деструктор можно вызвать так же, как обычную функцию, например:
		 date  *my_day; 
		my_day->date::~date(). 
деструктор вызывается автоматически при разрушении  объекта.
Описание слайда:
Основные свойства и правила использования деструкторов: Основные свойства и правила использования деструкторов: деструктор имеет то же самое имя, что и класс, в котором он объявляется, с префиксом ~ (тильдой); деструктор не возвращает значения ; деструктор не наследуется в производных классах; производный класс может вызвать деструкторы для его базовых классов; деструктор не имеет параметров; класс может иметь только один деструктор; деструктор - это функция, и он может быть виртуальным; невозможно получить в программе адрес деструктор); если деструктор не задан в программе, то он будет автоматически сгенерирован компилятором; деструктор можно вызвать так же, как обычную функцию, например: date *my_day; my_day->date::~date(). деструктор вызывается автоматически при разрушении объекта.

Слайд 13





Области видимости для классов

int x = 2;
class Example 
{	
void f () {x = 0;}        
	short x
};
void f () {::x = 0;}
Описание слайда:
Области видимости для классов int x = 2; class Example { void f () {x = 0;} short x }; void f () {::x = 0;}

Слайд 14





Спецификатор памяти static
class Example 
	{	public:
	static int x ;
	} p1, p2;
int Example::x=67;
Описание слайда:
Спецификатор памяти static class Example { public: static int x ; } p1, p2; int Example::x=67;

Слайд 15





Спецификатор const
class Stack {
 	    char  s[MaxSize];
 	     int top;
  	public:
 	    Stack () {top = 0;}
            void Look_Top() const {cout << s[top];}
           void push() {top++;}
};
const Stack s1;
Stack s2;
s2.Look_Top();
s1.push(); 
s1.Look_Top();
Описание слайда:
Спецификатор const class Stack { char s[MaxSize]; int top; public: Stack () {top = 0;} void Look_Top() const {cout << s[top];} void push() {top++;} }; const Stack s1; Stack s2; s2.Look_Top(); s1.push(); s1.Look_Top();

Слайд 16





Указатель this
date today, my_day; 
today.out(); 
my_day.out();
cout << day << " " << month;
Date *const this; 
cout << this­>day << " " << this­>month;
Описание слайда:
Указатель this date today, my_day; today.out(); my_day.out(); cout << day << " " << month; Date *const this; cout << this­>day << " " << this­>month;

Слайд 17





Организация списка
Организация списка
Описание слайда:
Организация списка Организация списка

Слайд 18





void spisok::Look()
void spisok::Look()
{
  cout << value << "\n" << str << "\n";
}
spisok * spisok::Get_Next()
{  return next;
}
main()
{
 spisok * p;
  p = new spisok(1,"stroka1");
  p = new spisok(2,"stroka2");
  p = new spisok(3,"stroka3");
  p=spisok::first;
 while (p!=0)
 {
	p->Look();
	p=p->Get_Next();
 }
}
Описание слайда:
void spisok::Look() void spisok::Look() { cout << value << "\n" << str << "\n"; } spisok * spisok::Get_Next() { return next; } main() { spisok * p; p = new spisok(1,"stroka1"); p = new spisok(2,"stroka2"); p = new spisok(3,"stroka3"); p=spisok::first; while (p!=0) { p->Look(); p=p->Get_Next(); } }

Слайд 19





Основные свойства и правила использования указателя this: 
Основные свойства и правила использования указателя this: 
каждый новый объект имеет свой скрытый указатель this;  
this указывает на начало своего объекта в памяти; 
this не надо дополнительно объявлять; 
this передается как скрытый параметр во все нестатические член-функции своего объекта; 
this - это локальная переменная, которая недоступна за пределами объекта.
Описание слайда:
Основные свойства и правила использования указателя this: Основные свойства и правила использования указателя this: каждый новый объект имеет свой скрытый указатель this; this указывает на начало своего объекта в памяти; this не надо дополнительно объявлять; this передается как скрытый параметр во все нестатические член-функции своего объекта; this - это локальная переменная, которая недоступна за пределами объекта.

Слайд 20





Дружественные функции

class rectangle 
{int color, x, y;
};
class circle 
{int color, x, y, radius; 
pubIic: 
friend bool equal-color(circle с, rectangle r); 
}; 
bool equal-color (circle с, rectangle r) 
{ if(c.color == r.color) return true; 
else return false; 
}
Описание слайда:
Дружественные функции class rectangle {int color, x, y; }; class circle {int color, x, y, radius; pubIic: friend bool equal-color(circle с, rectangle r); }; bool equal-color (circle с, rectangle r) { if(c.color == r.color) return true; else return false; }

Слайд 21





Член-функция одного класса может быть объявлена со спецификатором friend для другого класса.
Член-функция одного класса может быть объявлена со спецификатором friend для другого класса.
class Х { 
		int function_of_X(…); 
		 }; 
class У { 
		friend int Х:: function_of_X(…); 
		}; 
class Z { 
		friend class У; 
		};
Описание слайда:
Член-функция одного класса может быть объявлена со спецификатором friend для другого класса. Член-функция одного класса может быть объявлена со спецификатором friend для другого класса. class Х { int function_of_X(…); }; class У { friend int Х:: function_of_X(…); }; class Z { friend class У; };

Слайд 22





	class my_class2;  
	class my_class2;  
	class my_ class 1 
		{   int а; 
		    friend void fun(my_class1&,my_class2&); 
		pubIic: 
		   my_class1(int А) : а(А) {}; 
		}; 
	class my_class2 
		{   int а; 
                     friend void fun(my_class1&,my_class2&); 
		pubIic: 
		    my_class2(int А) : а(А) {}; 
		}; 
	void fun(my_class1& M1,my_class2& М2) 
		{ if (М1.а == М2.а) cout « "equal\n"; 
			else cout « "not equal\n"; 
	void main(void) 
		{ my_class1 mс1(100); 
		my_class2 mc2( 100); 
		fun(mc1,mc2);}
Описание слайда:
class my_class2; class my_class2; class my_ class 1 { int а; friend void fun(my_class1&,my_class2&); pubIic: my_class1(int А) : а(А) {}; }; class my_class2 { int а; friend void fun(my_class1&,my_class2&); pubIic: my_class2(int А) : а(А) {}; }; void fun(my_class1& M1,my_class2& М2) { if (М1.а == М2.а) cout « "equal\n"; else cout « "not equal\n"; void main(void) { my_class1 mс1(100); my_class2 mc2( 100); fun(mc1,mc2);}

Слайд 23





	class Х; 
	class Х; 
	class У 
		{     int а; 
		      void Y(int c): a(c){};
		pubIic: 
                     void display(X* рХ); 
		}; 
	class Х 
		{     int а; 
		      void X(int C): a(C){};
		pubIic: 
		     friend void Y::display(X*); 
		}; 
 	void Y::display(X* рХ) 
		{ cout« pX->a « '\t' « а «endl; } 
	void main(void) 
		{ Х my_X(100); 
		   У my_У(200); 
		   my_Y.display(&my_X);     / / Результат: 100 200 
		}
Описание слайда:
class Х; class Х; class У { int а; void Y(int c): a(c){}; pubIic: void display(X* рХ); }; class Х { int а; void X(int C): a(C){}; pubIic: friend void Y::display(X*); }; void Y::display(X* рХ) { cout« pX->a « '\t' « а «endl; } void main(void) { Х my_X(100); У my_У(200); my_Y.display(&my_X); / / Результат: 100 200 }

Слайд 24





Основные свойства и правила использования спецификатора  friend: 
 friend функции не являются компонентами класса, но получают доступ ко всем его компонентам; 
если friend функции одного класса не являются компонентами другого класса, то они вызываются так же, как и обычные rлобальные функции (без  операторов . и ->); 
если friend функции одного класса не являются компонентами другого класса, то они не имеют указателя this; 
friend функции не наследуются в производных классах; 
отношение friend не является транзитивным.
Описание слайда:
Основные свойства и правила использования спецификатора friend: friend функции не являются компонентами класса, но получают доступ ко всем его компонентам; если friend функции одного класса не являются компонентами другого класса, то они вызываются так же, как и обычные rлобальные функции (без операторов . и ->); если friend функции одного класса не являются компонентами другого класса, то они не имеют указателя this; friend функции не наследуются в производных классах; отношение friend не является транзитивным.

Слайд 25





Объявление и разрушение глобальных объектов:
Объявление и разрушение глобальных объектов:
 class А 
		{ int i;
		 pubIic: 
		    A(int I) : i(I)
			 { cout « "class А" « i « " constructor\n";} 	       
		   ~A() 
			{ cout « "class А" « i « "destructor\n"; } 
		}; 
		А а1(1),а2(2); 
		void main(void)
		 { getch(); }
Результаты выполнения этой программы:
 class А 1 constructor
 class А2 constructor 
< здесь можно нажать любую клавишу> 
class А2 destructor
 class А 1 destructor
Описание слайда:
Объявление и разрушение глобальных объектов: Объявление и разрушение глобальных объектов: class А { int i; pubIic: A(int I) : i(I) { cout « "class А" « i « " constructor\n";} ~A() { cout « "class А" « i « "destructor\n"; } }; А а1(1),а2(2); void main(void) { getch(); } Результаты выполнения этой программы: class А 1 constructor class А2 constructor < здесь можно нажать любую клавишу> class А2 destructor class А 1 destructor

Слайд 26





Объявление и разрушение локальных объектов.
Объявление и разрушение локальных объектов.
class А 
		{ int i;
		 pubIic: 
		A(int I) : i(I)     { cout « "class А" « i « " constructor\n"; }
		~A() 	 { cout « "class А" « i « "destructor\n"; } 
		}; 
	void fuпction(void)
	 	{ cout« "begin\n"; 
		А а1(1),а2(2);
		cout «"end\n"; } 
	void main(void) 
		{ cout« "before\n";
		 function(); 
		 cout « "after\n"; }		}
	 Результаты:
 before 
begin 
class А 1 constructor
 class А2 constructor 
end 
class А2 destructor
 class А 1 destructor
 after
Описание слайда:
Объявление и разрушение локальных объектов. Объявление и разрушение локальных объектов. class А { int i; pubIic: A(int I) : i(I) { cout « "class А" « i « " constructor\n"; } ~A() { cout « "class А" « i « "destructor\n"; } }; void fuпction(void) { cout« "begin\n"; А а1(1),а2(2); cout «"end\n"; } void main(void) { cout« "before\n"; function(); cout « "after\n"; } } Результаты: before begin class А 1 constructor class А2 constructor end class А2 destructor class А 1 destructor after

Слайд 27





Создание объектов в динамически выделяемой памяти
Создание объектов в динамически выделяемой памяти
class А
		 { int i;
		 pubIic:
		 A(int I) : i(I) { cout « "class А" « i « " constructor\n"; }
		~A ()    { cout « "class А" « i « "destructor\n"; }
		 };  
	void main(void)
	 { А *р1 == new А(1);  
	    А *р2 == new А(2);
	  delete р1;
	 delete р2; }
Результаты :
 class А 1 constructor 
class А2 constructor 
class А 1 destructor 
class А2 destructor
Описание слайда:
Создание объектов в динамически выделяемой памяти Создание объектов в динамически выделяемой памяти class А { int i; pubIic: A(int I) : i(I) { cout « "class А" « i « " constructor\n"; } ~A () { cout « "class А" « i « "destructor\n"; } }; void main(void) { А *р1 == new А(1); А *р2 == new А(2); delete р1; delete р2; } Результаты : class А 1 constructor class А2 constructor class А 1 destructor class А2 destructor

Слайд 28





Объявление объектов в виде компонентов в друrих классах.
Объявление объектов в виде компонентов в друrих классах.
class а
	 {int j; 
	pubIic
	 a(int J} : j(J} { cout « "class а" « j « " constructor\n"; } 
	~a() { cout « "class а" « j « "destructor\n"; } 
	}; 
	class b 
		{int i;
		 а а1; 
	 	pubIic: 
		b(int I,int J} : а1 (J},i(I) { cout « "class b" « i « "constructor\n"; }
		~b() { cout « "class b" « i « "destructor\n"; } 
		}; 
	void main(void)
	 { b b1(1, 1};
	   b b2(2,1);}	} 
Результаты: 
class а1 constructor 
 class b1 constructor 
 class а1 constructor 
class b2 constructor 
class b2 destructor 
class а1 destructor 
class b1 destructor 
class а1 destructor
Описание слайда:
Объявление объектов в виде компонентов в друrих классах. Объявление объектов в виде компонентов в друrих классах. class а {int j; pubIic a(int J} : j(J} { cout « "class а" « j « " constructor\n"; } ~a() { cout « "class а" « j « "destructor\n"; } }; class b {int i; а а1; pubIic: b(int I,int J} : а1 (J},i(I) { cout « "class b" « i « "constructor\n"; } ~b() { cout « "class b" « i « "destructor\n"; } }; void main(void) { b b1(1, 1}; b b2(2,1);} } Результаты: class а1 constructor class b1 constructor class а1 constructor class b2 constructor class b2 destructor class а1 destructor class b1 destructor class а1 destructor

Слайд 29





Наследование
Организация связи между абстрактными типами данных, при которой имеется возможность на основании существующих типов данных порождать новые типы
Описание слайда:
Наследование Организация связи между абстрактными типами данных, при которой имеется возможность на основании существующих типов данных порождать новые типы

Слайд 30





class employee 
class employee 
		{   char * name;     // имя
  	  	 int income;      // доход
 	       	employee * next; // следующий служащий
 	public:
  	  	  employee (char * n, int i); // конструктор
             void print() const;   // вывод на экран
		};
employee::employee(char * n, int i) : name(n), income(i)
{ next = 0;}
void employee::print() const
         { cout << name << "\n";}
Описание слайда:
class employee class employee { char * name; // имя int income; // доход employee * next; // следующий служащий public: employee (char * n, int i); // конструктор void print() const; // вывод на экран }; employee::employee(char * n, int i) : name(n), income(i) { next = 0;} void employee::print() const { cout << name << "\n";}

Слайд 31





class manager : public employee
class manager : public employee
 {  int level;        // уровень
	   employee * group; // подчиненные
	public:
	  manager(char *, int, int, employee *);
	  void print() const;
};
 void manager::print() const
{ employee::print();  
  cout << "руководит : ";
  group->print();}
manager::manager(char* n, int i,int l, employee * g):
     			  employee(n,i), level(l), group(g)
Описание слайда:
class manager : public employee class manager : public employee { int level; // уровень employee * group; // подчиненные public: manager(char *, int, int, employee *); void print() const; }; void manager::print() const { employee::print(); cout << "руководит : "; group->print();} manager::manager(char* n, int i,int l, employee * g): employee(n,i), level(l), group(g)

Слайд 32





void main()
void main()
{  employee person (“Иванов”,20);
manager one_more(“Петров”,40,1,&person);
person.print();
one_more.print();
}
Описание слайда:
void main() void main() { employee person (“Иванов”,20); manager one_more(“Петров”,40,1,&person); person.print(); one_more.print(); }

Слайд 33





Основные правила использования базовых и производных классов:
Пусть функция F принадлежит базовому классу Б. Тогда в производном классе П  можно: 
	1) полностью заменить функцию F (старая Б::F и новая П::F); 
	2) доопределить (частично изменить) функцию F; 
	3) использовать функцию Б::F без изменения.
	- Если объявить указатель рБ на базовый класс, то ему можно присвоить значение указателя на объект производного класса;
	- указателю рП на производный класс нельзя присвоить значение указателя на объект базовоrо класса; 
	 - регулирование доступа к компонентам базового и производного классов осуществляется с помощью атрибутов private, public и protected; 
	- производный класс может быть в свою очередь базовым. Множество классов, связанных отношением наследования базовый - производный, называется иерархией классов.
Описание слайда:
Основные правила использования базовых и производных классов: Пусть функция F принадлежит базовому классу Б. Тогда в производном классе П можно: 1) полностью заменить функцию F (старая Б::F и новая П::F); 2) доопределить (частично изменить) функцию F; 3) использовать функцию Б::F без изменения. - Если объявить указатель рБ на базовый класс, то ему можно присвоить значение указателя на объект производного класса; - указателю рП на производный класс нельзя присвоить значение указателя на объект базовоrо класса; - регулирование доступа к компонентам базового и производного классов осуществляется с помощью атрибутов private, public и protected; - производный класс может быть в свою очередь базовым. Множество классов, связанных отношением наследования базовый - производный, называется иерархией классов.

Слайд 34





Наследование атрибутов компонентов базового класса:
Описание слайда:
Наследование атрибутов компонентов базового класса:

Слайд 35





class base
class base
{protected:
 int x;
public:
 char * str;
void f(int, char*);
};
class generate : private base
{
protected:
 int base::x;
public:
 char * base::str;
 base::f;
…}
Описание слайда:
class base class base {protected: int x; public: char * str; void f(int, char*); }; class generate : private base { protected: int base::x; public: char * base::str; base::f; …}

Слайд 36





Множественное наследование
class base1 
{public:
int field;
char * str;
};
 class base2
 {public:
int field;
int data;
 };
class generate :public base1, public base2 
{…};
Generate ex;
ex.field = 4;		
ex.base1::filed = 4;
Описание слайда:
Множественное наследование class base1 {public: int field; char * str; };  class base2 {public: int field; int data; }; class generate :public base1, public base2 {…}; Generate ex; ex.field = 4; ex.base1::filed = 4;

Слайд 37





class base 
class base 
{public:
int field;
char * str;
};
class gen1 : public base
{public:
float s;
};
class gen2 : public base
{public:
char * name;
};
class global : public gen1, public gen2 
{…} ex;
Описание слайда:
class base class base {public: int field; char * str; }; class gen1 : public base {public: float s; }; class gen2 : public base {public: char * name; }; class global : public gen1, public gen2 {…} ex;

Слайд 38





Использование виртуального класса
class gen1 : virtual public base{...};
class gen2 : virtual public base{...};
class global : public gen1, public gen2 
{…} ex;
Формально конструктор класса global будет иметь вид:
global::global() : base(), gen1(), gen2() {...}
Описание слайда:
Использование виртуального класса class gen1 : virtual public base{...}; class gen2 : virtual public base{...}; class global : public gen1, public gen2 {…} ex; Формально конструктор класса global будет иметь вид: global::global() : base(), gen1(), gen2() {...}

Слайд 39





Полиморфизм
class Base
{  public:
    int f(const int &d) ;
int CallFunction(const int &d)
    { return f(d)+1;          }
};
class Derived: public Base
{  public:
    int f(const int &d)
    { return d*d; }
};
int main()
{   Base a;          
    cout << a.CallFunction(5)<< endl; 
    Derived b;
    cout << b.CallFunction(5)<< endl;      
    return();
}
Описание слайда:
Полиморфизм class Base { public: int f(const int &d) ; int CallFunction(const int &d) { return f(d)+1; } }; class Derived: public Base { public: int f(const int &d) { return d*d; } }; int main() { Base a; cout << a.CallFunction(5)<< endl; Derived b; cout << b.CallFunction(5)<< endl; return(); }

Слайд 40





class Clock
class Clock
{ public:
  		 void print() const { cout << "Clock!" << endl; }
};
class Alarm: public Clock
{ public:
   		 void print() const { cout << "Alarm!" << endl; }
};
void settime(Clock &d)
{ d.print(); }
Clock W;                  
settime(W);               
Alarm U;                 
settime(U);               
Clock *c1 = &W;           
c1->print();              
c1 = &U;                  
c1->print();      } 
((Alarm *)c1)->print();
Описание слайда:
class Clock class Clock { public: void print() const { cout << "Clock!" << endl; } }; class Alarm: public Clock { public: void print() const { cout << "Alarm!" << endl; } }; void settime(Clock &d) { d.print(); } Clock W; settime(W); Alarm U; settime(U); Clock *c1 = &W; c1->print(); c1 = &U; c1->print(); } ((Alarm *)c1)->print();

Слайд 41





Правила описания и использования виртуальных функций:
Правила описания и использования виртуальных функций:
Виртуальная функция может быть только методом класса.
Любую перегружаемую операцию-метод класса можно сделать виртуальной.
Виртуальная функция, как и сама виртуальность, наследуется.
Виртуальная функция может быть константной.
Если в базовом классе впервые объявлена виртуальная, то функция должна быть либо  чистой (virtual int f(void) = 0;), либо для нее должно быть задано определение.
Если в базовом классе определена виртуальная функция, то метод производного класса с такими же именем и прототипом автоматически является виртуальным.
Конструкторы не могут быть виртуальными.
Статические методы не могут быть виртуальными.
Деструкторы могут (чаще — должны) быть.
Если некоторая функция вызывается с использованием ее полного имени, то виртуальный механизм игнорируется.
Описание слайда:
Правила описания и использования виртуальных функций: Правила описания и использования виртуальных функций: Виртуальная функция может быть только методом класса. Любую перегружаемую операцию-метод класса можно сделать виртуальной. Виртуальная функция, как и сама виртуальность, наследуется. Виртуальная функция может быть константной. Если в базовом классе впервые объявлена виртуальная, то функция должна быть либо чистой (virtual int f(void) = 0;), либо для нее должно быть задано определение. Если в базовом классе определена виртуальная функция, то метод производного класса с такими же именем и прототипом автоматически является виртуальным. Конструкторы не могут быть виртуальными. Статические методы не могут быть виртуальными. Деструкторы могут (чаще — должны) быть. Если некоторая функция вызывается с использованием ее полного имени, то виртуальный механизм игнорируется.

Слайд 42





Вызов виртуальной функции  может не являться виртуальным в некоторых случаях:
Вызов виртуальной функции  может не являться виртуальным в некоторых случаях:
Вызывается не через указатель или ссылку:
global object;
object.f();
Вызывается через указатель или ссылку, но с уточнением имени класса:
base * p;
global object;
p = &object;
p->f();		// виртуальный вызов
p->global::f(); 	// не виртуальный вызов
вызывается в конструкторе или деструкторе базового класса.
Описание слайда:
Вызов виртуальной функции может не являться виртуальным в некоторых случаях: Вызов виртуальной функции может не являться виртуальным в некоторых случаях: Вызывается не через указатель или ссылку: global object; object.f(); Вызывается через указатель или ссылку, но с уточнением имени класса: base * p; global object; p = &object; p->f(); // виртуальный вызов p->global::f(); // не виртуальный вызов вызывается в конструкторе или деструкторе базового класса.



Похожие презентации
Mypresentation.ru
Загрузить презентацию