abstraction vs encapsulation in c++