Доступ к члену базового класса в многоуровневых составных отношениях - PullRequest
0 голосов
/ 10 мая 2018

У меня есть три уровня составного типа связи между классами, с членом, являющимся вектором. Ниже приведен код:

class vec1{
  public: int x;
  vec1(int n):x(n){}
};
class vec2{
  public: std::vector<vec1> v1;
};
class vec3{
  public: std::vector<vec2> v2;
};

В функции main () я создам объект

 vec1 v(10);
 vec3 v3;

Я хочу получить доступ к классу "переменная vec1's x", используя объект v3

Какие векторные функции объекта v3 можно использовать для печати «переменной x vec1's» ->

1 Ответ

0 голосов
/ 10 мая 2018

Я хочу получить доступ к классу "переменная vec1's x", используя объект v3

Это показывает отсутствие ясности с вашей стороны относительно того, как связаны различные объекты.

v3 содержит std::vector из vec2 объектов. Это пустой std::vector, когда v3 построен так, как вы. Вы должны добавить объект типа vec2 в v3.v2, чтобы иметь доступ к любому объекту vec2 из v3.

v3.v2.push_back(vec2());
vec2& v2 = v3.v2[0]; // Now you have access to a vec2 object from v3.

Однако v1 объекта vec2 является пустым std::vector. Вам нужно добавить vec1 объект, прежде чем вы сможете получить доступ к такому объекту из v3.

v3.v2.push_back(vec2);
v3.v2[0].v1.push_back(vec1(10));
vec1& v1 = v3.v2[0].v1[0]; // Now you have access to a vec1 object from v3.

Теперь вы можете получить доступ и изменить x объекта vec1.

v3.v2.push_back(vec2);
v3.v2[0].v1.push_back(vec1(10));

// Get the value and print it to cout.
std::cout << v3.v2[0].v1[0].x << std::endl;

Change the value
v3.v2[0].v1[0].x = 20;
...