Sometimes I need to expose some of the class members. For example in the following example class Mechanic may need direct access to Engine componen
yes, it makes sense - for maintainability, validation, and consistency.
you may need to change many aspects of the class in the future, providing an accessor can help minimize breakage of client code.
you can enter all the validation logic you need here, to ensure that engine is a valid pointer, is not in an unusable state, etc.
finally, your code will be consistent: you won't have to open the header to know the member visibility - you just always know. this is also useful with templates.