Объектно-ориентированное программирование на алгоритмическом языке С++
Жизненный цикл объекта
Конструктор копии
Объекты в качестве возвращаемого значения функции
Встраиваемые функции
Пример 1
Дружественная функция
Предварительное объявление наименования класса
Дружественный класс
Операторы new и delete
Операторы new и delete
Операторы new и delete
Операторы new и delete
Операторы new и delete
Наследование
Наследование
Наследование
Защищенные члены класса
Защищенные члены класса
Исключение повторного добавления описания класса
Пример исключение повторного добавления класса
97.00K
Category: programmingprogramming

Объектно-ориентированное программирование на алгоритмическом языке С++

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
English     Русский Rules