Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-50_1.docx
Скачиваний:
9
Добавлен:
02.08.2019
Размер:
707.62 Кб
Скачать
  1. Использование классов, работа с массивами и указателями на обьекты.

С массивами объектов можно работать также, как и с масивами любых других объектов.

Пример:

int main()

{Tmoney a[5], sa; // объявление массива а и переменной sa;

for (int i=0;i<5;i++) // инициализация элементов массива;

a[i].Init(i);

for (int i=0;i<5;i++) a[i].DisplayMoney(); // вывод элементов массива;

sa.Init(0.0); // обнуление sa.summa = 0;

for (int i=0;i<5;i++) sa = sa.AddMoney(a[i]); // суммирование элементов массива;

sa.DisplayMoney(); // вывод вывод полученной суммы на экран;

sa.Init(0.0);

for (int i=0;i<5;i++) sa = a[i].AddMoney(sa); sa.DisplayMoney(); // 2-ой вариант;

return 0;}

Работа с указателями на объекты.

int main()

{Tmoney *pt = new Tmoney(), *pp, *ps; // объявление указателей;

pp = new Tmoney(); ps = new Tmoney(); // создание объектов;

pt → Init(1000.24); pt → DisplayMoney(); // инициализация и вывод;

pp → Init(2000.25); pp → DisplayMoney();

ps → Init(0.0); ps → DisplayMoney();

ps = (*pt).AddMoney(*pp); // сложение;

ps → DisplayMoney();

ps → ReadMoney(); ps → DisplayMoney(); // ввод и вывод;

delete ps; delete pt; delete pp;

return 0;}

Для работы с указателями используется операция доступа ( → ) и операция разыменования ( * ). Простые скобки после имени конструктора можно не писать, но при наличии ( ) созданный объект инициализируется нулями, а при их отсутствии значения полей данных не определены.

  1. Наследование, пример использования наследования.

В ООП существует возможность создания иерархии классов, при которых создаваемые производные классы — потомки, могут наследовать свойства базовых родительских классов. При этом свойства могут изменяться.

Простое наследие — когда класс-потомок имеет одного родителя. При множественном он может наследовать свойства 2-х и более классов.

class <имя производного класса>:<ключ доступа><имя базового класса>{<тело класса>}, где ключ доступа — public, private, protected.

Пример: class X {…}; class Y {…}; class Z {…}; class W: X, protected Y, public Z {…}.

Ключ доступа в базовом классе в потоке

private нет доступа

private protected private

public private

private нет доступа

protected protected protected

public protected

private нет доступа

public protected public

public public

Если родительский класс наследуется с ключом private, то некоторые элементы можно сделать доступными в потоке, описав его в теле потока с нужным ключом доступа

class roditel {… public: int method_1(); …};

class potok: private roditel {… public: roditel::int method_1(); …};

Метод с именем method_1 класса родитель будет общедоступным в объектах класса potok.

Пример наследования: class xmax{protected : static const int n = 2; int x[n]; int max_x (int x[n])

{int I;s = x[0]; for (i=0; i<n; i++) if (s<x[i]) s = x[i]; // поиск максимума;

return s;};

class tabl: public xmax;

{pubic: int sum_max (int y[n][n]) //сумма максимумов строк;

{int i, j, sum; sum = 0;

for (i=0; i<n; i++) {for (j=0; j<n; j++) x[j] = y[i][j];

sum+=max_x(x);};

return sum;};};

int main()

{const int m = 2; tabl obj1, obj2; int i, j, rez; int arr1[m][m] = {{7,5},{3,4}};

int arr2[m][m];

rez = obj1.sum_max(arr1);

for (i=0; i<m; i++) for(j=0; j<m; j++) cin>>arr2[i][j];

rez = obj2.sum_max(arr2);

cout<<rez;

return 0;}

Конструкторы не наследуются. Если в конструкторе потомка явно не вызывается конструктор предка, то он вызывается автоматически. При иерархии вызываются с самого верхнего.

Деструкторы не наследуются, также создается автоматически. Имеет обратный порядок ( т.е. последний деструктор базового класса).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]