У меня есть вектор объектов класса Point3D внутри класса Figure3D. Функция, которая изменяет координаты объекта Point3D внутри вектора, не меняет координаты объекта Point3D, находящегося вне вектора.
Использование функции Figure3D :: Pos () Я вижу, что координаты изменились внутри вектора после использования функции Figure3D :: Move (), но с помощью Point3D :: full_pos () Я вижу, что объект Point3D по-прежнему имеет начальные координаты.
#include <vector>
#include <iostream>
#include <math.h>
#define PI acos(-1)
class Point3D {
public:
Point3D()
{
X = 0;
Y = 0;
Z = 0;
}
Point3D(double a, double b, double c) {
X = a;
Y = b;
Z = c;
};
void full_pos() {
std::cout << "Coordinates of the point are: X = " << X << " Y = " << Y << " Z = " << Z << std::endl;
}
void Move(double dx, double dy, double dz) {
X += dx;
Y += dy;
Z += dz;
}
private:
double X, Y, Z;
};
class Figure3D :public Point3D {
public:
Figure3D() {
f.reserve(10);
}
void AddPoint(Point3D *p) {
f.push_back(*p);
}
void Move(double x, double y, double z) {
for (auto it = f.begin(); it != f.end(); it++) {
it->Move(x, y, z);
}
}
void Pos() {
int i = 0;
for (auto it = f.begin(); it != f.end(); it++) {
cout << "Position of point " << i << " X: " << it->posX() << " Y: " << it->posY() << " Z: " << it->posZ() << std::endl;
i++;
}
}
private:
std::vector<Point3D> f;
};
int main() {
Point3D p1(1, 2, 3), p2(2, 2, 2), p3(5, 4, 7), p4(4, 9, 0);
Figure3D f1;
f1.AddPoint(&p1);
f1.AddPoint(&p2);
f1.AddPoint(&p3);
f1.AddPoint(&p4);
f1.Pos();
p1.full_pos();
f1.Move(10, 10, 10);
f1.Pos();
p1.full_pos();
}