У меня проблема с доступом к объекту, который является переменной класса. Наследование и отношения выглядят следующим образом:Доступ к переменной класса
#include "X.h"
class Y
{
X object;
public:
X & getObject();
};
Тогда другой файл/класс:
#include "Y.h"
class Z : public Y
{
X object2;
public:
X & getObject2();
};
И, наконец, класс, который получил вектор указателей на объекты.
#include "Z.h"
class XYZ
{
vector<Y*> cont; //contains objects of class type Z and Y
};
Если я хочу, чтобы получить доступ к object
переменной, я просто пишу
cont[index]->getObject();
Но нет никакого способа, чтобы получить доступ к object2
, компилятор не увидеть даже такой метод, как getObject2()
, Я полагаю, что мое описание не ясное, но в любом случае я надеюсь, что вы мне поможете.
Все остальное в стороне, передача неконстантных ссылок на переменные-члены - это плохая идея, потому что ваш класс просто потерял контроль над своим внутренним состоянием - * имеет * этот элемент управления - это вся идея писать объектно-ориентированное программное обеспечение в первое место. – DevSolar
getObject2 - это функция производного класса, и вы сохраняете указатели на родительский класс. См. Http://www.learncpp.com/cpp-tutorial/121-pointers-and-references-to-the-base-class-of-derived-objects/ для решений. – Chiel
@Chили комментарий в коде ясно указывает, что вектор содержит объекты * обоих * типов. – davmac