The point of the abstraction of setters and getters is that the method of retrieval may change. When you access the member variable directly, then if anything changes, you have to update your usage everywhere. But if you use the function, then changing the way the variable is retrieved only has to change in the function.
Now, because this is the same class, it is much less of a concern than when you make variables public, because you only have to update this one implementation file (instead of updatinng every user of your class, which may not be possible if you have a library class).
To see this, look at a class that suddenly needs to be made thread safe. Now, your copier would look like
void myClass::copyVar1(myClass * dat)
{
scoped_lock lock(mutex);
var1 = dat->getVar1();
}
and you would not have to fix anywhere else if you always called by function. If you accessed the variable directly, then it would look like
void myClass::copyVar1(myClass * dat)
{
scoped_lock lock(mutex);
scoped_lock lock2(dat->mutex)
var1 = dat->var1;
}
which locks "dat"s mutex external to dat, usually not considered a very good design (if you make engineers have to remember to lock other people's objects then you open up the chance that they forget and don't do it).
Similarly, if the variable began to be stored on a database, you'd have to handle that as well. Or if the variable now was stored in two different variables and constructed when it was retrieved, you can see how the complexity would increase.
But remember, the design philosophy of using accessors and mutators is to lower potential complexity through encapsulation. There are times when working on smaller projects (particularly personal projects) where you have no intention of ever changing the class. It might be less complex to access them directly. Don't be afraid to do so, just know why you are making the decision.