member access does not have anything to do with performance. It's about "encapsulation".
The idea with OOP/encapsulation is that you have a class which represents a very specific thing. By hiding some information (by making it protected/private), you prevent the user of the class from misusing it.
The user doesn't need to know how the class works internally. They just need to know how to interact with it.
A good example of this is the std::string class. Under the hood, this class does all sorts of things, like dynamic memory allocation, buffer sharing, reference counting, etc, etc. It's all a kind of magic. But none of that really matters because you don't have to know about any of it to use the class. You can just use its member functions and operator overloads to do all the work. In short -- it prevents the user from misusing the class. As a result, any novice can pick up and use std::string and not have to worry about memory leaks and other maintenance problems. The class "just works".
Encapsulation improves organization by keeping specific jobs the responsibility of specific classes. Keeping responsibilities organized like this makes it much easier to manage, especially when the program gets larger.
As a contrast... let's say you have a dynamically allocated buffer in your program. Something like this:
Now let's say that buffer does not have a clear owner, and the responsibility for reallocating/destroying it is not restricted to a single class (ie: any part of the program that needs to resize the buffer does it directly).
What happens when your program is 20+ source files large? What if there's a memory leak or heap corruption? How can you possibly hope to find the problem in such a large program -- because there was no clear organizational structure, the problem could be anywhere in the 20+ files.
Whereas if you encapsulte, the problem will be isolated to a few functions and will be much easier to find and fix (not to mention you'll be less likely to make the mistake in the first place).