Similar presentations:
Объектно-ориентированное программирование на алгоритмическом языке С++
1. Объектно-ориентированное программирование на алгоритмическом языке С++
МИРЭА, Институт Информационных технологий,кафедра Вычислительной техники
2. Жизненный цикл объекта
ПланОписание
Старт
объекта
Создание.
Конструирование
Остановка
Функционирование
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
Уничтожение
Демонтаж
2
3. Конструктор копии
Описание заголовка конструктора копии«имя класса» ( const «имя класса» & «локальное имя» );
class cl_1 {
int i;
public:
cl_1 ( const cl_1 & ob );
};
cl_1 :: cl_1 ( const cl_1 & ob ) {
i = ob.i;
}
void func ( cl_1 ob_local ) {
. . . .
}
int main ( ) {
cl_1 ob;
// Конструктор по умолчанию
func ( ob );
// Конструктор копии
return 0;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
3
4. Объекты в качестве возвращаемого значения функции
Примерclass cl_1 {
int i;
public:
cl_1 ( const cl_1 & ob );
};
cl_1 :: cl_1 ( const cl_1 & ob ) {
i = ob.i;
}
cl_1 func () {
cl_1 ob_local;
. . . .
return ob_local;
}
int main ( ) {
cl_1 ob;
// Конструктор по умолчанию
ob = func ( );
return 0;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
4
5. Встраиваемые функции
// В заголовочной части«тип метода» «имя метода» ( [«параметры»] )
{
// код реализации
}
// В части реализации
inline «тип метода» «имя класса» :: «имя метода» ( [«параметры»] )
{
// код реализации
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
5
6. Пример 1
#include <iostream>using namespace std;
class cl_1 {
int i;
int k;
public:
int get_i ( ) { return i; }
int get_k ( );
};
inline int cl_1 :: get_k( )
{
return k;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
6
7. Дружественная функция
Дружественная функция - не является членом класса, но получает доступ кзакрытым элементам объекта класса.
friend «тип функции» «имя функции» ( «параметры» );
#include <iostream>
using namespace std;
class cl {
// ...
public:
friend void frnd ( cl ob );
// ...
};
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
7
8. Предварительное объявление наименования класса
#include <iostream>using namespace std;
class myclass;
int sum ( myclass x )
{
return x.a + x.b;
}
class myclass {
int a, b;
public:
myclass ( int i, int j ) { a=i; b=j; }
friend int sum ( myclass x ); // дружественная функция
};
int main()
{
myclass n ( 3, 4 );
cout << sum ( n );
return 0;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
8
9. Дружественный класс
friend «имя дружественного класса»;#include <iostream>
using namespace std;
class cl_f;
class cl_1 {
int a, b;
public:
cl_1 ( int i, int j ) { a=i; b=j; }
friend cl_f; // дружественный класс
};
class cl_f {
public:
void change ( cl_1 & c ) { c.a = c.b; }
};
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
9
10. Операторы new и delete
«указатель на объект класса» = new «имя класса» [ ( «аргументы» ) ];delete «указатель на объект класса»;
#include <iostream>
using namespace std;
int main(} {
int * p;
p = new int;
// выделение памяти для целого
if ( ! p ) {
cout << "Ошибка выделения памяти\п";
return 1;
}
* р = 1000;
cout << "Это целое, на которое указывает р: " << * р << "\п";
delete p; // освобождение памяти
return 0;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
10
11. Операторы new и delete
#include <iostream>using namespace std;
class samp {
int i, j;
public:
void set_ij ( int a, int b ) { i = a; j = b; }
int get_product() { return i * j; }
};
int main() {
samp * p;
p = new samp; // выделение памяти объекту
if( ! p ) {
cout << "Ошибка выделения памяти\n";
return 1;
}
(*p).set_ij ( 4, 5 );
cout << "Итог равен:" << p -> get_product() << "\n";
delete p;
return 0;
}
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
11
12. Операторы new и delete
Для динамически размещаемого одномерного массиваиспользуется такая форма оператора new:
«указатель на массив» = new «имя типа» [ «размер» ];
Для удаления динамически размещенного одномерного массива
используется следующая форма оператора delete:
delete [ ] «указатель на массив»;
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
12
13. Операторы new и delete
#include <iostream>using namespace std;
class samp {
int i, j;
public:
void set_ij ( int a, int b ) { i = a; j = b; }
int get_product() { return i * j; }
};
int main() {
samp * p;
p = new samp[5]; // выделение памяти массиву объектов
p[2].set_ij ( 4, 5 );
cout << "Итог равен:" << p[2].get_product(} << "\n";
}
delete []p;
return 0;
МИРЭА, Институт Информационных технологий, кафедра
вычислительной техники
13
14. Операторы new и delete
#include <iostream>using namespace std;
class samp {
public:
int *m;
};
int main() {
samp * p;
p = new samp[5]; // выделение памяти объекту
p[2].m = new int[3];
p[2].m[1] = 36;
cout << “1-й элемент 2-го объекта:" << p[2].m[1];
}
delete [] p[2].m;
delete [] p;
return 0;
МИРЭА, Институт Информационных технологий, кафедра
вычислительной техники
14
15. Наследование
class «имя производного класса» :«спецификатор доступа» «имя базового класса»
«спецификатор доступа» — public | private | protected
Рассмотрим спецификаторы public и private
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
15
16. Наследование
Базовый классПроизводный
класс
: public
public:
Открытые
элементы
Открытые
элементы
public:
Открытые
элементы
private:
Закрытые
элементы
private:
Закрытые
элементы
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
Производный
класс
: private
public:
Открытые
элементы
private:
Закрытые
элементы
Закрытые
элементы
16
17. Наследование
#include <iostream>using namespace std;
class base {
int x;
public:
void setx ( int n ) { x = n; }
void showx ( )
{ cout << x << "\n"; }
class derived: public
{
int y;
public:
void sety ( int
void showy ( )
};
int main ( ) {
derived ob;
ob.setx ( 10 );
ob.sety ( 20 );
ob.showx ( );
ob.showy ( );
return 0;
}
base // Класс наследуется как открытый
n ) { у = n; }
{ cout << у << "\n"; }
//
//
//
//
доступ
доступ
доступ
доступ
к
к
к
к
члену
члену
члену
члену
базового класса
производного класса
базового класса
производного класса
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
17
18. Защищенные члены класса
Производныйкласс
: public
public:
Открытые
элементы
Открытые
элементы
private:
Закрытые
элементы
Базовый класс
public:
Открытые
элементы
private:
Закрытые
элементы
protected:
Защищенные
элементы
protected:
Защищенные
элементы
Производный
класс
: private
public:
Открытые
элементы
private:
Закрытые
элементы
Закрытые
элементы
Закрытые
элементы
Защищенные
элементы
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
18
19. Защищенные члены класса
Производныйкласс
: protected
public:
Открытые
элементы
private:
Закрытые
элементы
protected:
Защищенные
элементы
Базовый класс
public:
Открытые
элементы
private:
Закрытые
элементы
protected:
Защищенные
элементы
Открытые
элементы
Защищенные
элементы
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
19
20. Исключение повторного добавления описания класса
#ifndef наименование класса_H#define наименование класса_H
Описание заголовочной части класса
#endif // наименование класса_H
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
20
21. Пример исключение повторного добавления класса
#ifndef CL_1_H#define CL_1_H
class cl_1 {
int a, b;
public:
cl_1 ( int i, int j ) { a=i; b=j; }
friend cl_f; // дружественный класс
};
#endif
// CL_1_H
МИРЭА, Институт Информационных технологий, кафедра Вычислительной техники
21