Well, I can take a shot at some helpful hints.
Friend functions allow you to use private and protected members of a class outside of the scope of that class. That is, you have a function that needs access to the parts of a class you want to keep "secret", but that function for whatever reason can't be part of the class itself (eg. you don't want it to be called from the class or an object of the class). One big example is overloading the stream insert/extract operators (<< and >>).
Before I go into that, I should make a brief touch on operator overloading. One thing to hammer into your head is that in c++, an operator is not much more than a function that has it's arguments arranged in a way that makes logical sense. Operator overloading allows you to define how those operators work with classes you design. For example, if you have a Fraction class, and you want to add two fraction objects, you could create your own function "add" and add Fractions like this: fraction1.add(fraction2); or you could overload the + operator and use fraction1 + fraction2. (Good practice is to define both and have one call the other).
So, to complete the example of both operator overloading and friend functions, let say you have a class with a private member x. You want to be able to use cout to print x without defining a "getter" function, so you use the stream insert operator. That operator often takes the form, ostreamParameter << myClassParameter, and returns an ostream. When overloading the operator, it looks like this (assuming you're using the appropriate namespaces)
class myClass
{
public: //declare friends inside the class, even though they technically aren't part of the class.
friend ostream& operator<<(ostream& output, const Point& p);
private:
int x; //this is our "secret"
};
//Because friend functions aren't part of the class, don't prepend the function name with myClass::
ostream& operator<< (ostream& out, const myClass& c)
{
out << c.x; //now we can use the "secret'!
return out; //we return out so we can chain them
//eg cout << "My secret is " << c;
}
I hope that helps a bit. I'll type of something for inheritance and polymorphism if someone else doesn't.