Private IMPlementation (è conosciuto con vari nomi tra cui quello del link)
https://en.wikipedia.org/wiki/Opaque_pointe
In sostanza nella classe di cui si vuole nascondere l'implementazione si scrive un puntatore opaco, definito poi nel file.cpp.
Al netto di controllo errori, in pratica si ha qualcosa del genere (come caso di studio almeno):
//in file.h
class Prova {
public:
Prova();
Prova(const Prova&);
~Prova();
void setClasse(int var1, int var2);
void getClasse(int *v1, int *v2);
private:
struct Pimpl; // struttura opaca
Pimpl* pimpl;
};
//////////////////////////////////
// in file.cpp
struct Prova::Pimpl {
int numero1;
int numero2;
};
Prova::Prova() : pimpl(new Pimpl) {}
Prova::Prova(const Prova& rhs) {
pimpl = new Pimpl(*rhs.pimpl);
}
Prova::~Prova() {
delete pimpl;
}
void Prova::setClasse(int var1, int var2) {
pimpl->numero1 = var1;
pimpl->numero2 = var2;
}
void Prova::getClasse(int *v1, int *v2) {
*v1 = pimpl->numero1;
*v2 = pimpl->numero1;
}