Yup, I think your idea of friend classes is totally wrong.
Friend classes/functions can access the private members of a class. That's basically it. If you specify "friend class Test" in class Blah, then it means that Test can access and manipulate private, protected and public members/functions of class Blah.
I hope this clears it up a bit.
void CallBlahFunc(Blah& b)
b.BlahFunc(); // valid, coz it's a friend of blah
friend class Test;
b.BlahFunc(); // wont work, private function
t.CallBlahFunc(); // works no problem