1) Oui, un programme lourdement objet sera plus lent que le même qui serait purement impératif sans objet. La perte de perf vient du fait que chaque objets doit être construit et détruit, et que chque appel d´un membre est assez long vu qu´il faut passer pas mal d´argument (au moins) sur la pile à chaque fois.
Mais dans certain cas, ça peut ne faitre qu´une toute petite différence, et surtout tu peut programmez bien plus vite (parfois)
2)ça dépend de ce que tu veux dire : tu peut faire des classes partout partout mais au final il doit bien y avoir du code quelque part. Et contrairement àun langage comme le C#, certain concept de base ne sont pas des objets et tu devrait bien les manipuler à un moment ou à un autre. De plus, le point d´entrée d´un programme doit être une fonction et non un objet, donc tu ne peut pas faire que des objets.
3) en C++ il n´y a aucune différence entre une class et une struct si ce n´est que les membres de la class sont private par défaut alors qu´ils sont public dans la struct. Mais tu peut donc garder exactement le même code et y rajoutter des fonctionnalité. Enfin là, la réponse dépend quand même énormément de ton programme, il n´y a pas de "bonne" réponse je pense.