🗊 Презентация This.Перегрузка

Категория: Образование
Нажмите для полного просмотра!
This.Перегрузка, слайд №1 This.Перегрузка, слайд №2 This.Перегрузка, слайд №3 This.Перегрузка, слайд №4 This.Перегрузка, слайд №5 This.Перегрузка, слайд №6 This.Перегрузка, слайд №7 This.Перегрузка, слайд №8 This.Перегрузка, слайд №9 This.Перегрузка, слайд №10 This.Перегрузка, слайд №11 This.Перегрузка, слайд №12 This.Перегрузка, слайд №13 This.Перегрузка, слайд №14 This.Перегрузка, слайд №15 This.Перегрузка, слайд №16 This.Перегрузка, слайд №17 This.Перегрузка, слайд №18 This.Перегрузка, слайд №19 This.Перегрузка, слайд №20 This.Перегрузка, слайд №21 This.Перегрузка, слайд №22 This.Перегрузка, слайд №23 This.Перегрузка, слайд №24 This.Перегрузка, слайд №25 This.Перегрузка, слайд №26 This.Перегрузка, слайд №27 This.Перегрузка, слайд №28 This.Перегрузка, слайд №29

Содержание

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

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


Слайд 1


п4. Неявный указатель this Каждый объект класса имеет свою копию член- данных, но один экземпляр каждой член- функции для всех объектов. Возникает...
Описание слайда:
п4. Неявный указатель this Каждый объект класса имеет свою копию член- данных, но один экземпляр каждой член- функции для всех объектов. Возникает вопрос, как же член-функция “понимает”, с член-данными какого объекта она работает? Ответ очевиден - с теми, которые принадлежат объекту, вызвавшему эту функцию. Например, s2.Print(); // с член-данными объекта s2

Слайд 2


this Говорят, что в функцию в этом случае передается неявный указатель на этот объект. Его можно задать и явно с помощью ключевого слова this....
Описание слайда:
this Говорят, что в функцию в этом случае передается неявный указатель на этот объект. Его можно задать и явно с помощью ключевого слова this. Например, void Print() { cout line; } Однако в данном случае - это излишне.

Слайд 3


Но бывают ситуации (кстати, Но бывают ситуации (кстати, довольно частые при использовании ООП), когда приходится задавать этот указатель явно.
Описание слайда:
Но бывают ситуации (кстати, Но бывают ситуации (кстати, довольно частые при использовании ООП), когда приходится задавать этот указатель явно.

Слайд 4


Пример В классе String определим функцию, которая будет к первой строке приписывать вторую и результатом возвращать первую (конкатенация строк),...
Описание слайда:
Пример В классе String определим функцию, которая будет к первой строке приписывать вторую и результатом возвращать первую (конкатенация строк), объявив ее в классе String Plus(String &);

Слайд 5


и определив ее за классом: и определив ее за классом: String String :: Plus (String &s2) {char *t = new char[ len+1]; strcpy(t, line); delete []line;...
Описание слайда:
и определив ее за классом: и определив ее за классом: String String :: Plus (String &s2) {char *t = new char[ len+1]; strcpy(t, line); delete []line; len = len+s2.len; // новая длина line = new char[ len+1]; strcpy(line, t); strcat(line, s2.line); delete [] t;

Слайд 6


Пример использования функции Plus: String s1(“Объект “),s2(“класса String.”); String *s3 = new String(s1.Plus(s2)); // работает функция Plus, // а...
Описание слайда:
Пример использования функции Plus: String s1(“Объект “),s2(“класса String.”); String *s3 = new String(s1.Plus(s2)); // работает функция Plus, // а затем конструктор копирования // при создании динамического объекта s3 s3->Print(); // вывод *s3 = ”Объект класса String.”;

Слайд 7


п5. Перегрузка операций New. Перегрузка функций. Это одно из проявлений полиморфизма в С++. Перегрузка функций - это использование одинаковых имен...
Описание слайда:
п5. Перегрузка операций New. Перегрузка функций. Это одно из проявлений полиморфизма в С++. Перегрузка функций - это использование одинаковых имен для однотипных функций. Рассмотрим на примере. Пусть требуется написать 3 функции вывода: массива a из m целых чисел; длинного целого числа; строки символов.

Слайд 8


Начинаем работу с «придумывания Начинаем работу с «придумывания имен», например: void Printm (int *a, int m) для массива, void Printl (long n) для...
Описание слайда:
Начинаем работу с «придумывания Начинаем работу с «придумывания имен», например: void Printm (int *a, int m) для массива, void Printl (long n) для длинного целого, void Prints (char *s) для строки. В С++ все эти 3 функции могут быть заданы одним именем

Слайд 9


Поскольку список формальных Поскольку список формальных аргументов у каждой функции разный, т.е. отличается количеством и/или типом (говорят -...
Описание слайда:
Поскольку список формальных Поскольку список формальных аргументов у каждой функции разный, т.е. отличается количеством и/или типом (говорят - сигнатурой), то при вызове функций компилятор по списку фактических аргументов разберется, какой экземпляр функции требуется вызвать. Print(“Hello!”); // функция Print(char *) Print(a, 20); // функция Print(int *, int) Print( 50000l ); // функция Print(long)

Слайд 10


Конструкторы - полиморфизм Заметим, что определение нескольких конструкторов в классе - это перегрузка функций, т.е. проявление полиморфизма для...
Описание слайда:
Конструкторы - полиморфизм Заметим, что определение нескольких конструкторов в классе - это перегрузка функций, т.е. проявление полиморфизма для член-функций класса.

Слайд 11


Возможна двусмысленность! int sum2(int a, int b) { return a+b; } float sum2(float a, float b) { return a+b; } void main() { int a = 4, b = 5, c;...
Описание слайда:
Возможна двусмысленность! int sum2(int a, int b) { return a+b; } float sum2(float a, float b) { return a+b; } void main() { int a = 4, b = 5, c; float x = 3.5, y = 2, z; c = sum2(a, b); cout

Слайд 12


В таких ситуациях достаточно одной функции float sum2(float a, float b) { return a+b; } void main() { int a = 4, b = 5,c; float x = 3.5, y = 2, z; c...
Описание слайда:
В таких ситуациях достаточно одной функции float sum2(float a, float b) { return a+b; } void main() { int a = 4, b = 5,c; float x = 3.5, y = 2, z; c = sum2(a, b);//действует преобразование int ->float cout

Слайд 13


Перегрузка операций В С++ можно выполнить перегрузку операций для объектов класса, то есть с помощью знаков операций +, -, *, и т.д. можно определить...
Описание слайда:
Перегрузка операций В С++ можно выполнить перегрузку операций для объектов класса, то есть с помощью знаков операций +, -, *, и т.д. можно определить похожие действия для абстрактных типов данных

Слайд 14


Двуместная операция тип_возвращаем_знач. operator @ (операнд_2) {тело_операции}, где @ - знак двуместной операции. Первым операндом является объект,...
Описание слайда:
Двуместная операция тип_возвращаем_знач. operator @ (операнд_2) {тело_операции}, где @ - знак двуместной операции. Первым операндом является объект, в классе которого эта операция определяется, т.е. * this, второй операнд – произвольный (операнд_2). Используется перегруженный знак так же, как для стандартных типов данных операнд1 @ операнд2

Слайд 15


Пример 1 В классе String вместо функции Plus можно определить операцию ‘+=’ String& String :: operator +=( String &s2 ) { char *t = new char[ len+1...
Описание слайда:
Пример 1 В классе String вместо функции Plus можно определить операцию ‘+=’ String& String :: operator +=( String &s2 ) { char *t = new char[ len+1 ]; strcpy(t, line); // сохраним временно первый операнд! delete [] line; len = len + s2.len; // новая длина line = new char[ len+1 ]; strcpy( line, t); strcat( line, s2.line); delete [] t; return *this; }

Слайд 16


Пример использования В примере из п.4 вместо оператора String *s3 = new String(s1.Plus(s2)); можно записать String *s3= new String(s1+=s2); String...
Описание слайда:
Пример использования В примере из п.4 вместо оператора String *s3 = new String(s1.Plus(s2)); можно записать String *s3= new String(s1+=s2); String s(“Студент “), r(“Петров “); s += r; // s = “Студент Петров”

Слайд 17


Пример 2 В классе String определим функцию сравнения двух строк int String :: EqStr(String s) { if(strcmp(line, s.line)) return 0; //строки не равны...
Описание слайда:
Пример 2 В классе String определим функцию сравнения двух строк int String :: EqStr(String s) { if(strcmp(line, s.line)) return 0; //строки не равны return 1; // строки равны } String s1(“Иванов”), s2(“Петров”); if ( s1.EqStr(s2)) puts(”Строки равны”); else puts(”Строки не равны”);

Слайд 18


Перегрузка сравнения == int String :: operator == (String &s) {if (strcmp(line, s.line)) return 0; return 1; } If (s1 == s2) puts(”\n Строки равны”);...
Описание слайда:
Перегрузка сравнения == int String :: operator == (String &s) {if (strcmp(line, s.line)) return 0; return 1; } If (s1 == s2) puts(”\n Строки равны”); else {s1. Print(); printf(” - это не “); s2.Print();}

Слайд 19


Не забыть При описании класса эти перегруженные операции надо объявить class String { ... public: ... String& operator += ( String &); int operator...
Описание слайда:
Не забыть При описании класса эти перегруженные операции надо объявить class String { ... public: ... String& operator += ( String &); int operator == (String &); ... };

Слайд 20


Одноместная операция тип_возвращаемого_знач. operator @ ( ) {тело_операции} где @ - знак одноместной операции. Обращение @ операнд
Описание слайда:
Одноместная операция тип_возвращаемого_знач. operator @ ( ) {тело_операции} где @ - знак одноместной операции. Обращение @ операнд

Слайд 21


Пример 3 Определим операцию реверса строки, т.е. перестановки символов в обратном порядке. String String :: operator ~ ( ) {int i; char t; for(i = 0;...
Описание слайда:
Пример 3 Определим операцию реверса строки, т.е. перестановки символов в обратном порядке. String String :: operator ~ ( ) {int i; char t; for(i = 0; I < len/2; i++) {t = line[i], line[i] = line[ len – i – 1], line[len – i – 1] = t;} return *this; }

Слайд 22


Пример использования String r(«телефон»); ~r; r. Print(); // вывод «нофелет»
Описание слайда:
Пример использования String r(«телефон»); ~r; r. Print(); // вывод «нофелет»

Слайд 23


Задача Задано слово. Является ли слово «перевертышем»? void main() { String s1(“казак”); String s2 = s1; s1.Print(); if (s1 == ~s2) puts(” –...
Описание слайда:
Задача Задано слово. Является ли слово «перевертышем»? void main() { String s1(“казак”); String s2 = s1; s1.Print(); if (s1 == ~s2) puts(” – перевертыш”); else puts(” - не перевертыш”); }

Слайд 24


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

Слайд 25


Правила перегрузки (продолжение): 3. Наряду с обычным использованием перегруженного знака obj1 @ obj2 для двуместной операции и @ obj для одноместной...
Описание слайда:
Правила перегрузки (продолжение): 3. Наряду с обычным использованием перегруженного знака obj1 @ obj2 для двуместной операции и @ obj для одноместной он может использоваться как член-функция класса obj1.operator @(obj2) и obj.operator @()

Слайд 26


Правила перегрузки (окончание): 4. Нельзя перегружать операции для стандартных типов данных. Например, + для массивов, определенных, как int * a или...
Описание слайда:
Правила перегрузки (окончание): 4. Нельзя перегружать операции для стандартных типов данных. Например, + для массивов, определенных, как int * a или int a[20] . 5. Нельзя перегружать операции :: . ?: sizeof

Слайд 27


п6. Примеры перегрузки некоторых операций 1. Перегрузка [ ] Пусть определен объект String s(«Еденица»); s[2] = ’и’;
Описание слайда:
п6. Примеры перегрузки некоторых операций 1. Перегрузка [ ] Пусть определен объект String s(«Еденица»); s[2] = ’и’;

Слайд 28


Объяснимся Действительно, объект может иметь несколько полей данных типа «массив» и компилятору неизвестно, к какому из массивов мы хотели бы...
Описание слайда:
Объяснимся Действительно, объект может иметь несколько полей данных типа «массив» и компилятору неизвестно, к какому из массивов мы хотели бы применить операцию [ ].

Слайд 29


Вместо функции Index (см п. 2), определим операцию [ ] Вместо функции Index (см п. 2), определим операцию [ ] char & String :: operator [ ] ( int i)...
Описание слайда:
Вместо функции Index (см п. 2), определим операцию [ ] Вместо функции Index (см п. 2), определим операцию [ ] char & String :: operator [ ] ( int i) { if (i=len) {puts(“Индекс за пределами строки»); exit(0);} return line[i]; } s[2] = ’и’; // ”Единица” cout



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