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

Вариант 16

Разработать классы complex и Array, позволяющие использовать их в следующей программе:

Complex x(1.3,4.2), y(4.0, 8.1), z(y); x.add(y); z.assign(plus(x,y)); z.print();

Array a1(10), a2(10); (a1[0]).assign(y); (a1[1]).assign(z); a2=a1; a2.print();

//Complex.h

#pragma once

class Complex {

private:

double re, im;

public:

Complex();

Complex(const Complex&);

Complex(double, double);

Complex& assign(const Complex&);

void print() const;

Complex& add(const Complex&);

friend Complex plus(const Complex&, const Complex&);

};

//Complex.cpp

#include <iostream>

#include "Complex.h"

using std::cout;

Complex::Complex(double a, double b) {

re = a;

im = b;

}

Complex::Complex() : Complex(0, 0) {

}

Complex::Complex(const Complex& a) : Complex(a.re, a.im) {

}

Complex& Complex::assign(const Complex& a) {

re = a.re;

im = a.im;

return *this;

}

Complex& Complex::add(const Complex& a) {

re += a.re;

im += a.im;

return *this;

}

void Complex::print() const {

cout << "re = " << re << " im = " << im << std::endl;

}

Complex plus(const Complex& a, const Complex& b) {

return Complex(a.re + b.re, a.im + b.im);

}

//Array.h

#pragma once

#include <iostream>

using std::ostream;

#include "Complex.h"

#define DEFAULT_SIZE 10

class Array {

Complex* arr;

int size = DEFAULT_SIZE;

public:

~Array();

Array();

Array(int);

Complex& operator[](const int);

Array& operator=(const Array&);

void print() const;

};

//Array.cpp

#include <iostream>

#include "Array.h"

Array::~Array() {

delete[]arr;

arr = nullptr;

}

Array::Array(int s) {

if (s <= 0)

throw -1;

size = s;

arr = new Complex[size];

}

Array::Array() {

size = DEFAULT_SIZE;

arr = new Complex[DEFAULT_SIZE];

}

Complex& Array::operator[](const int i) {

if (i < 0 || i >= size)

throw - 1;

else

return arr[i];

}

Array& Array::operator=(const Array& a) {

delete []arr;

size = a.size;

arr = new Complex[size];

for (int i = 0; i < size; i++)

arr[i].assign(a.arr[i]);

return *this;

}

void Array::print() const {

for (int i = 0; i < size; i++)

arr[i].print();

}

Вариант 6, 17, 19

Задание:

Разработать классы Point и Array, позволяющие использовать их в следующей программе:

Point p1(10,20), p2(40,25), p3(p1); cout<<p2.move(40,20)<<(p1+=p2); p3=-p2;

Array a1(10), a2(10); a1[0]=a1[1]=p2; a2=a1; cout<<(a1+a2);

Написать тексты h-файлов и cpp-файлов для классов Point и Array. Нарисовать диаграммы классов.

//main.cpp

#include "Array.h"

void main() {

Point p1(10, 20), p2(40, 25), p3(p1);

cout << p2.move(40, 20) << (p1 += p2);

p3 = -p2;

Array a1(10), a2(10);

a1[1] = Point(1, 2);

a1[0] = a1[1] = p2;

a2 = a1;

cout << (a1 + a2);

system("pause");

}

//Point.h

#include <iostream>

using namespace std;

class Point {

private:

int x;

int y;

public:

Point();

Point(const int, const int);

Point(const Point&);

Point& move(const int, const int);

Point& operator =(const Point&);

Point& operator +=(const Point&);

Point operator -() const;

friend ostream& operator <<(ostream&, const Point&);

};

//Point.cpp

#include "Point.h"

Point::Point() {

x = 0;

y = 0;

}

Point::Point(const int a, const int b) {

x = a;

y = b;

}

Point::Point(const Point& p) {

*this = p;

}

Point& Point::move(const int dx, const int dy) {

x += dx;

y += dy;

return *this;

}

Point& Point::operator =(const Point& p) {

x = p.x;

y = p.y;

return *this;

}

Point& Point::operator +=(const Point& p) {

x += p.x;

y += p.y;

return *this;

}

Point Point::operator -() const {

return Point(-x, -y);

}

ostream& operator << (ostream& s, const Point& r) {

s << "(" << r.x << ", " << r.y << ")";

return s;

}

//Array.h

#include "Point.h"

class Array {

private:

Point *pa;

int size;

public:

Array();

Array(const int);

Array(const Array&);

~Array();

Array& operator =(const Array&);

Point& operator [](const int) const;

Array operator +(const Array&) const;

friend ostream& operator <<(ostream&, const Array&);

};

//Array.cpp

#include "Array.h"

Array::Array() {

pa = NULL;

size = 0;

}

Array::Array(const int s) {

size = s;

pa = new Point[s];

for (int i = 0; i < s; i++)

pa[i] = Point();

}

Array::Array(const Array& a) {

*this = a;

}

Array::~Array() {

if (size > 0)

delete [] pa;

}

Array& Array::operator =(const Array& a) {

if (size > 0)

delete [] pa;

size = a.size;

pa = new Point[size];

for (int i = 0; i < size; i++)

pa[i] = a.pa[i];

return *this;

}

Point& Array::operator [](const int i) const {

if (i >= 0 && i < size)

return pa[i];

else

throw -1;

}

Array Array::operator +(const Array& a) const {

int newSize = size + a.size;

Array newArr(newSize);

for (int i = 0; i < newSize; i++)

newArr.pa[i] = i < size ? pa[i] : a.pa[i - size];

return newArr;

}

ostream& operator <<(ostream& s, const Array& a) {

for (int i = 0; i < a.size; i++)

s << i << ": " << a.pa[i] << endl;

return s;

}

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