Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class cube {
- friend class arr_cube;
- private:
- double x,y,z,r;
- public:
- cube(double X=1, double Y=1, double Z=1, double R=1) {x=X; y=Y; z=Z; r=R;} //конструктор по умолчанию и с параметрами сразу
- cube(const cube& A) {x=A.x; y=A.y; z=A.z; r=A.r;}
- void operator=(const cube& A) {x=A.x; y=A.y; z=A.z; r=A.r;}
- friend cube operator+(cube,cube);
- friend cube operator*(cube,double);
- friend cube tocube(double,double,double,double);
- };
- class arr_cube {
- private:
- cube *x; //объявляем указатель на вектор (х - будет массивом векторов)
- int n;//количество элементов массива
- public:
- arr_cube(int);//конструктор принимает количество элементов массива
- arr_cube(const arr_cube&); //копиконструктор
- ~arr_cube();//деструктор
- void set(int,cube); //устанавливает новый cube на позицию int
- void operator=(const arr_cube&); //оператор присваивания
- cube operator[](int) const;//оператор возвращает вектор с позиции int
- friend arr_cube operator+(const arr_cube&,const arr_cube&);
- friend arr_cube operator*(const arr_cube&,double); //ВЕКТОР УМНОЖИТЬ НА ЧИСЛО
- friend arr_cube operator*(double,const arr_cube&); //ЧИСЛО УМНОЖИТЬ НА ВЕКТОР
- void show();
- void del(int);
- };
- void arr_cube::del(int N) {
- cube *tmp;
- tmp=new cube [n-1];
- for(int i=0; i<N; i++) {
- tmp[i]=x[i];
- }
- for(int i=N+1; i<n; i++) {
- tmp[i-1]=x[i];
- }
- delete[]x;
- x=tmp;
- n--;
- }
- cube operator+(cube a, cube b); //оператор складывания массивов векторов (прототип, чтоб компилятор знал что он есть)
- cube operator*(cube a, double b);//оператор умножения вектора на число (аналогично)
- arr_cube::arr_cube(const arr_cube& A) { //копиконструктор
- n=A.n; //количество элементов теперь как в массиве А
- x=new cube [n]; //создадим массив векторов из n штук в переменной х
- for(int i=0; i<n; i++)
- x[i]=A.x[i]; //скопируем все значения из А в наш массив
- }
- void arr_cube::operator=(const arr_cube& A) {
- n=A.n;
- x=new cube[n]; //оператор присваивания аналогичен копиконструктору
- for(int i=0; i<n; i++)
- x[i]=A.x[i];
- }
- cube tocube(double x,double y, double z,double r) {
- cube tmp;
- tmp.x=x; //функция создания куба из 4-х чисел
- tmp.y=y;
- tmp.z=z;
- tmp.r=r;
- return tmp;
- }
- arr_cube::arr_cube(int N) { //описание конструктора
- n=N; //количество элементов массива теперь n=N
- x=new cube [n]; //создадим массив из n элементов
- for(int i=0;i<n;i++) {x[i].x=i; x[i].y=i+1; x[i].z=i+2;} //по умолчанию запполнение всего массива дефолтными значениями
- }
- arr_cube::~arr_cube() { //описание деструктора
- delete[]x;
- }
- void arr_cube::set(int N, cube tmp) { //функция вместо N-ого ветора вставляет этот вектор
- if(n<N) return; //если в массиве 10 элементов а мы хотим записать в 120ый элемент то ничего не делать.
- x[N]=tmp; //иначе вектор tmp присвоить на место N-ого
- }
- cube arr_cube::operator [](int N) const { //возвращает вектор с номером N
- return x[N];
- }
- arr_cube operator+(const arr_cube& a,const arr_cube& b) { //оператор складывания массивов векторов
- arr_cube c(a.n); //создадим новый массив С с количеством элементов как в а.
- for(int i=0; i<c.n; i++)
- c.set(i,a[i]+b[i]); //присвоим всем элементам значения суммы векторов по элементно
- return c; //вернем этот массив
- }
- cube operator+(cube a, cube b) { //оператор складывания кубов
- return tocube(a.x+b.x,a.y+b.y,a.z+b.z,a.r+b.r);
- }
- cube operator*(cube a, double b) {//оператор умножения векторов
- return tocube(a.x*b,a.y*b,a.z*b,a.r*b);
- }
- arr_cube operator*(const arr_cube& a,double k) {//оператор умножения массива векторов на число
- arr_cube c(a.n);
- for(int i=0; i<c.n; i++) {
- c.set(i,a[i]*k); //аналогично оператор +
- }
- return c;
- }
- arr_cube operator*(double k, const arr_cube& a) {//умножения числа на вектор
- return a*k; //используем уже существующую функцию для выполнения того же самого что и выше. только поменяв местами.
- }
- void arr_cube::show() {
- cout<<endl<< "X: "; for(int i=0;i<n;i++) cout<<x[i].x<<" ";
- cout<<endl<< "Y: "; for(int i=0;i<n;i++) cout<<x[i].y<<" ";
- cout<<endl<< "Z: "; for(int i=0;i<n;i++) cout<<x[i].z<<" ";
- cout<<endl<< "R: "; for(int i=0;i<n;i++) cout<<x[i].r<<" ";
- cout<<endl;
- }
- int main() {
- arr_cube a(5),b(5); //создадим 2 массива из 5 элементов
- cube a1,a2,a3,a4; //создадим 4 пустых вектора
- a1=tocube(1,1,1,1); //вектор а1 будет (1,1,1) итд
- a2=tocube(2,1,0,2);
- a3=tocube(4,3,5,4);
- a4=tocube(1,-1,9,5);
- a.set(0,a1); //на 0 место в массиве "а" запишем вектор а1. итд.
- a.set(1,a2);
- b.set(0,a3);
- b.set(1,a4);
- a.show(); //вывести на экран а, и б, их сумму, и опять а, и а*5, и 5*а.
- b.show();
- (a+b).show();
- a.show();
- (a*5).show();
- (5*a).show();
- a.del(2);
- a.show();
- }
Advertisement
Add Comment
Please, Sign In to add comment