Bonjour J'ai besoin d'accéder aux données de DataContainer à la classe Derived by Base. Je ne peux pas simplement rendre ces données publiques parce que j'utilise cette classe là où elle ne devrait pas être accessible.Accès aux données privées vers une autre classe sans ami C++
Je pourrais utiliser juste un ami mais ensuite je dois faire des accesseurs pour les classes dérivées dans la classe de base. Cela le rendra inextensible.
#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...
}
};
Ma question est comment accéder à ces données sans le rendre public ou ami.
MISE À JOUR
Ce answer ne me aide pas parce que ami ne me fait pas mal. J'essaie juste d'éviter d'écrire des lignes de code par un mouvement intelligent. je pouvais écrire quelque chose comme ceci:
class DataContainer
{
friend class Base
std::vector<Data> dataVector;
};
class Base
{
DataContainer* dataContainer;
std::vector<Data>& GetDataVector() { return dataContainer->dataVector;}
};
Mais quand j'ajouter des vecteurs dans DataContainer je vais devoir mettre à jour cette classe.
Eh bien maintenant tout dans 'DataContainer' est privé donc il est inaccessible à tout le monde. – NathanOliver
Oui. Cela devrait être protégé. Edité – Bezifabr
Cela n'aide toujours pas. C'est toujours inaccessible. Il doit être public ou vous devez fournir des accesseurs. – NathanOliver