Здравствуйте, мне нужно получить доступ к данным из DataContainer в Derived by Base. Я не могу просто сделать эти данные общедоступными, потому что я использую этот класс там, где он не должен быть доступен.Доступ к личным данным другому классу без друга C++
Я мог бы использовать только друга, но тогда мне нужно сделать аксессуар для классов Derived в базовом классе. Это сделает его нерасторжимым.
#include <vector>
class Data; // It's not important
class DataContainer
{
protected:
std::vector<Data> dataVector;
std::vector<Data> dataVector2;
};
class Base
{
protected:
DataContainer* dataContainer;
public:
virtual ~Base() {};
void SetDataContainer(DataContainer* dataContainer)
{
this->dataContainer = dataContainer;
}
virtual void UseDataFromVector() = 0;
};
class Derived:public Base
{
public:
virtual ~Derived() {};
virtual void UseDataFromVector()
{
//And here want to use data from DataContainer...
}
};
Мой вопрос в том, как получить доступ к этим данным, не делая их общедоступными или друзьями.
UPDATE
Это answer мне не помогает, потому что друг мне не больно. Я просто стараюсь избегать написания строк кода с помощью умного перемещения. я мог бы просто написать что-то вроде этого:
class DataContainer
{
friend class Base
std::vector<Data> dataVector;
};
class Base
{
DataContainer* dataContainer;
std::vector<Data>& GetDataVector() { return dataContainer->dataVector;}
};
Но когда я добавляю больше векторов в DataContainer я буду обновлять этот класс.
Хорошо, сейчас все в 'DataContainer' является частным, поэтому оно недоступно для всех. – NathanOliver
Да. Он должен быть защищен. Отредактировано – Bezifabr
Это все равно не помогает. Он по-прежнему недоступен. Он должен быть общедоступным или вам необходимо предоставить аксессуар. – NathanOliver