Yep mais c'est bizarre comme manière de faire. Enfin globalement vu qu'un image est un cas particulier de calque dans ta structure de classe, toute fonction qui attend un calque peut utiliser une image. Plutôt que de passer par des pointeurs moi je te conseille d'utiliser des références, c'est plus la classe : ca donne un code plus lisible et tu bénificies des avantages des pointeurs (pas de recopies inutiles, possibilité de modifier le paramètre pointé par la référence etc...)
Exemple :
struct A{
int plop;
A(int a0=0):a(a0){}
};
int f(A & a){
a.plop = 2;
}
Ensuite je ne sais pas trop ce que tu entends par "ajouter un enfant" mais si ca consiste à rajouter un objet dans un container, je t'invite à utiliser tout simplement des conteneurs de la STL, par exemple un std::map.
Pour conclure, tu peux utiliser sur une classe fille les méthodes protected et public de la classe mère (si c'est un héritage public) mais ce n'est pas le cas dans un héritage protected...
Enfin si tu as besoin d'utiliser des méthodes de la classe fille sur un objet de type mère (mais qui est en réalité une instance fille), tu disposes d'outils tels que le dynamic_cast ou le static_cast... à utiliser avec modération.