Ok, I figured I'll just point you to a site and then offer my explanation as well. Here's a good link.
http://cplusplus.com/doc/tutorial/classes2.html
This link talks about the "this" keyword and static member data/functions of a class.
This "this" keyword just means "this class".
A Copy Constructor is a special kind of constructor. For example, lets say you have a simple linked list and you want to make a complete copy of it. Dynamic memory and all. Then you would need to make a copy constructor to do this. You could also do operator overloading for the '=' operator, but that's for a later discussion.
There are two types of copying. There's shallow copying where it just copies the members functions and member data and does not copy dynamic data and there's deep copying which does copy dynamic data. Here's a quick picture I whipped up in mspaint to better illustrate my point.
http://img297.imageshack.us/img297/240/copyao2.png
Copy constructors are REALLY useful when you have an array of pointers pointing to some dynamic data and you want to make a copy of it for various operations and such.
Now on to inline functions. Lets say you have two functions in your program. You have int main() and you have float FindAverage(/* your parameter list */). Now let's say you want to inline FindAverage(). What inlining a function does is tell the compiler to replace all function call of FundAverage with the code inside FindAverage. Here's some before and after compiler inline optimization.
This is the code before compiler optimization.
#include <iostream>
using namespace std;
inline void FindAverage(int, int, int&);
int main()
{
int exam1;
int exam2;
int average;
cout << "Enter exam1 score: ";
cin >> exam1;
cout << endl << "Enter exam2 score: ";
cin >> exam2;
FindAverage(exam1, exam2);
cout << "Average has been computed" << endl;
return 0;
}
inline void FindAverage(int exam1, int exam2, int& avg)
{
avg = (exam1 + exam2)/2;
}
This is how the compiler would treat the code.
#include <iostream>
using namespace std;
int main()
{
int exam1;
int exam2;
int average;
cout << "Enter exam1 score: ";
cin >> exam1;
cout << endl << "Enter exam2 score: ";
cin >> exam2;
avg = (exam1 + exam2)/2; // The code for FindAverage has
// been substituted in it's place.
cout << "Average has been computed" << endl;
return 0;
}
The benefits for this is that when you do a normal function call it pushes the current data to the stack and then jumps to the function being called. Afterwards it returns after destroying any data that the function created and pops the data from the stack. So basically the only advantage it has is in function overhead. Using inline doesn't require the stack. However it's only useful for small functions. It should only be used when the code from compiling is faster than the required overhead. It's just another technique for optimization of code.
Here's some links that will explain this concept. It probably does a better way of explaining it then I do.
http://cplusplus.com/doc/tutorial/functions2.html
[edit]I just noticed my explanation and code for inline function has some differentces but I think you should be able to get the point of it.

Hope this helps![/edit]