I have not used C++ for many years and I am following your tutorial to refresh and update my knowledge.
The Pointers section explains * and & prefixes, but does not explain the & postfix. Fair enough, it will be introduced later.
In the Classes (II) section dealing with operator overloading the & postfix does appear, but with no explanation as to what it is.
Eventually in the Copy Constructor part of the next section it is described as a 'reference to the class itself', which still needs clarification.
As far as I am able to remember, I would define it as used on an argument that is passed as a pointer but used as if it has already been dereferenced. I think this should be explained at the start of the Classes (II) section. (especially if I have got it wrong!)
-- a reference is LIKE a pointer in many ways, but is not a pointer.
if you look at a tutorial on c++ references, it will help.
as far as your question...
foo (const foo &input); // header for copy constructor has a reference (not a pointer) to the same type as the class for its parameter (because you are planning on copying from a thing of type foo to another thing of type foo).
these work just like a reference parameter in any other function.
void bar(int &x); //x was passed by reference and if x is changed inside the function it will change what was passed into it. If this is not familiar, you need to stop here and study this carefully.
a reference is LIKE a pointer in many ways, but is not a pointer.
To forestall a bunfight that happens over and over... :)
While it is true that many implementations often choose to implement references "under the hood" as memory addresses (i.e. identical to a pointer), that's "just" an implementation detail. In the C++ language, a reference is not the same as a pointer, and a reference is not "just a dereferenced pointer".
As Jonnin says, a reference is not a pointer, even if compilers often choose to write the assembly code related to a reference similarly to how they write assembly related to pointers.