Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика ООП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.36 Mб
Скачать

Тема: перевантаження операцій.

Мета: вивчення способів перевантаження операцій С++ та їх використання для роботи з об’єктами.

Матеріально-технічне оснащення робочого місця: ПК, інструкційна картка.

Зміст та послідовність виконання завдань

1. Створити клас ДРОБІВ - раціональних чисел, що є відношенням двох цілих чисел. Перевантажити операції для додавання, віднімання, множення і ділення дробів. Визначити потокові операції введення-виведення дробів.

Програма:

#pragma once

class Cdouble

{public:

Cdouble() : value(0)

{}

Cdouble(double _value)

{

Init(_value);

}

void GetValue() const

{

std::cout << " res = " << value << std::endl;

}

void Zero() { value = 0; } //занулення значення

void Init(const double &_value) { value = _value; }

friend const Cdouble& operator + (const Cdouble &left, const Cdouble& right) { return left.value + right.value; } // +

friend const Cdouble& operator - (const Cdouble &left, const Cdouble& right) { return left.value - right.value; } // -

friend const Cdouble& operator * (const Cdouble &left, const Cdouble& right) { return left.value * right.value; } // *

friend const Cdouble& operator / (const Cdouble &left, const Cdouble& right) { return left.value / right.value; } // /

friend bool operator ==(const Cdouble &left, const Cdouble& right) {

if (left.value == right.value) return 1;

else return 0;

}

friend bool operator !=(const Cdouble &left, const Cdouble& right) {

if (left.value != right.value) return 1;

else return 0;

}

friend bool operator <(const Cdouble &left, const Cdouble& right) {

if (left.value < right.value) return 1;

else return 0;

}

friend bool operator >(const Cdouble &left, const Cdouble& right) {

if (left.value > right.value) return 1;

else return 0;

}

friend bool operator <=(const Cdouble &left, const Cdouble& right) {

if (left.value <= right.value) return 1;

else return 0;

}

friend bool operator >=(const Cdouble &left, const Cdouble& right) {

if (left.value >= right.value) return 1;

else return 0;

}

private:

double value; };

Результат:

2. Створити клас для роботи з КАТАЛОГАМИ файлової системи. Елементами каталога є об’єкти класу ФАЙЛ, які містять назву файла, розмір, дату і час створення, атрибути. Перевантажити операції для пошуку файла у каталозі, копіювання, витирання, перейменування файла.

Програма:

#include <iostream.h>

#include <conio.h>

#define interface struct

interface IVolume {

virtual ~IVolume(){};

virtual double FindVol(double x, double y, double t) = 0;

};

class CParall : public IVolume{

public:

CParall(){ cout<<"CParall type obj create\n"; }

virtual ~CParall(){ cout<<"CParall type obj destroy\n"; }

virtual double FindVol(double x, double y, double t){ return x*y*t;}

};

//A yoii eeanna ia ae?o eiaeee, io iioi?ioea oae iieo?aaony.

class CPyramid : public IVolume {

public:

CPyramid() { cout<<"CPyramid type obj create\n"; }

virtual ~CPyramid() { cout<<"CPyramid type obj destroy\n"; }

virtual double FindVol(double x, double y, double t){ return x*y*t;} };

class CSphere : public IVolume {

public:

CSphere() { cout<<"CSphere type obj create\n"<<'\n'; }

virtual ~CSphere() { cout<<"CSphere type obj destroy\n"; }

virtual double FindVol(double x, double y, double t){

return (4*3.14*x/3)/3;

}};

int main(){

const int size = 3;

CParall *cp = new CParall ;

CPyramid *cpyr = new CPyramid ;

CSphere *cs = new CSphere ;

IVolume *i_ptr[size] = {cp,cpyr,cs};

cout<<i_ptr[0]->FindVol(2,3,4)<<'\n';

cout<<i_ptr[1]->FindVol(2,3,2)<<'\n';

cout<<i_ptr[2]->FindVol(5,0,0)<<'\n';

cout<<'\n';

for(int i =0;i<size;i++)delete i_ptr[i];

cout<<'\n';

getch();

}

Результат: