Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2011(12 лаб)_декабрь.doc
Скачиваний:
4
Добавлен:
26.08.2019
Размер:
1.1 Mб
Скачать

Приклад виконання завдання

Розробити ієрархію класів для роботи з одновимірними динамічними масивами з перевантаженими операторами new[] і delete[], яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.

Лістинг програми

#include<iostream>

usingnamespace std;

#include<malloc.h>

class SomeClass{

int some;

public:

// перевантажені оператори new і delete,

// тут також використовуютсья додаткові параметри, що передаються усередині операторів

void * operatornew(size_t size,char* str = "New");

voidoperatordelete(void* ptr);

// перевантажені оператори new [] і delete []

void * operatornew [] (size_t fullsize, char* str = "New []");

void operator delete [] (void* ptr);

};

void * SomeClass::operatornew( size_t size,char* str)

{

cout <<"\n"<<str<<"\n";

void*ptr = malloc(size);

if(!ptr){

cout<<"\nError memory new!!!\n";

}

else{

cout<<"\nMemory new - OK!!!\n";

}

return ptr;

}

void * SomeClass::operatornew[]( size_t fullsize,char*

str)

{

cout <<"\n"<<str<<"\n";

void*ptr = malloc(fullsize);

if(!ptr){

cout<<"\nError memory new[]!!!\n";

}

else{

cout<<"\nMemory new[] - OK!!!\n";

}

return ptr;

}

void SomeClass::operator delete( void* ptr)

{

free(ptr);

cout<<"\nDelete memory\n";

}

void SomeClass::operator delete[](void* ptr)

{

free(ptr);

cout<<"\nDelete [] memory\n";

}

int main()

{

SomeClass *p = new SomeClass;

SomeClass *r = new SomeClass [3];

delete p;

delete[]r;

system("pause");

}

Результат роботи програми:

New

Memory new - OK!!!

New []

Memory new[] - OK!!!

Delete memory

Delete [] memory

Приклад виконання завдання

Розробити ієрархію класів для роботи з двовимірними динамічними масивами з перевантаженим оператором інкремента (--) та декремента(++), яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.

Лістинг програми

#include<iostream>

usingnamespace std;

// Клас, що реалізує роботу з "парою чисел"

class Pair{

// Ціле число.

int N;

// Дійсне число.

double x;

public:

// Конструктор з параметрами

Pair(int n, double xn)

{

N = n;

x = xn;

}

// Функція для показу даних на екран

void display()

{

cout <<"\nPair: N = "<< N <<" x = "<< x <<"\n";

}

// Компонентна функція (префіксна --):

Pair&operator -- ()

{

// Зменшуємо вміст об’єкта в десять разів і повертаємо його на місце виклику оператора

N /= 10;

x /= 10;

return *this;

}

// Компонентна фнкція (постфіксна --):

Pair&operator -- (int k)

{

// тимчасово зберігаємо вміст об’єкта в незалежну змінну типу Pair (cпроба використати тут значення додаткового параметра int k підтверджує його рівність 0)

Pair temp(0,0.0);

temp.N=N+k;

temp.x=x+k;

// зменшуємо об’єкт в 10 раз

N /= 10;

x /= 10;

// повертаємо першочергове значення об’єкта.

// таким "тактичним ходом" ми досягаємо ефекту постфіксної форми, тобто в ситуації А=B++.B А записується поточне значення об’єкта B, тоді як сам об’єкт B змінюється

return temp;

}

};

int main()

{

// створюємо об’єкт Z, саме з ним ми і будемо експериментувати

Pair Z(10,20.2);

// показ об’єкта в першочерговому вигляді

cout<<"\nObject Z (before):\n";

Z.display();

cout<<"\n-----------------\n";

// присвоюємо об’єкту Pref вираз з префіксною формою (в даному випадку спочатку зміниться Z, а потім відбудеться присвоювання).

Pair Pref=--Z;

// демонструємо результат роботи префіксної форми

cout<<"\nPrefix\n";

cout<<"\nObject Pref:\n";

Pref.display();

cout<<"\nObject Z (after):\n";

Z.display();

cout<<"\n-----------------\n";

// присвоюємо об’єкту Postf вираз з постфіксною формою (в даному випадку спочатку відбудеться присвоювання, а потім зміниться Z).

Pair Postf=Z--;

// демонструємо результат роботи постфіксної форми

cout<<"\nPostfix\n";

cout<<"\nObject Postf:\n";

Postf.display();

cout<<"\nObject Z (after):\n";

Z.display();

system ("pause");

}

Результат роботи програми:

Object Z (before):

Pair: N = 10 x = 20.2

-----------------

Prefix

Object Pref:

Pair: N = 1 x = 2.02

Object Z (after):

Pair: N = 1 x = 2.02

-----------------

Postfix

Object Postf:

Pair: N = 1 x = 2.02

Object Z (after):

Pair: N = 0 x = 0.202