Hallo Ich muss auf Daten von DataContainer zu Abgeleitet von Basisklasse zugreifen. Ich kann diese Daten nicht einfach öffentlich machen, weil ich diese Klasse dort verwende, wo sie nicht zugänglich sein sollte.Zugriff auf private Daten zu anderen Klasse ohne Freund C++
Ich könnte nur Freund verwenden, aber dann muss ich Accessoren für abgeleitete Klassen in der Basisklasse machen. Dies wird es unaussprechlich machen.
#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...
}
};
Meine Frage ist, wie man auf diese Daten zugreifen kann, ohne sie öffentlich oder Freund zu machen.
UPDATE
Diese answer hilft mir nicht, weil Freund mich nicht verletzt. Ich versuche nur zu vermeiden, Codezeilen mit smart move zu schreiben. konnte ich nur so etwas schreiben:
class DataContainer
{
friend class Base
std::vector<Data> dataVector;
};
class Base
{
DataContainer* dataContainer;
std::vector<Data>& GetDataVector() { return dataContainer->dataVector;}
};
Aber wenn ich mehr Vektoren in Datacontainer hinzufügen Ich werde diese Klasse aktualisieren.
Nun, im Moment ist alles in 'DataContainer' privat, so dass es nicht für jeden zugänglich ist. – NathanOliver
Ja. Es sollte geschützt werden. Bearbeitet – Bezifabr
Das hilft immer noch nicht. Es ist immer noch nicht zugänglich. Es muss öffentlich sein oder Sie müssen Accessoren bereitstellen. – NathanOliver