Avansc is largely correct. Don't make it out to be "learning C++," but rather, "Learning to Program."
I actually have had a considerable amount of "teaching" experience. In Jr. High, I taught two extracurricular classes, and in High school/College I've done a vast amount of tutoring and competition training. I am not, however, a good teacher, so I really cannot give you any great hints. :P
If you'd like advice or hints on particular topics, let me know and I'll see if I can't relay some of my experience. Also, it is very true: not everyone will learn, simply because not everyone
wants to. You should be able to figure out quite quickly who is there because they want to learn, and who is for resume padding. Seriously, make it easy on yourself and focus your attention on the ones who actually want to learn.
How can I explain certain concepts like classes and inheritance? Inheritance is easier but IDK any layman's word for classes... Can I call it "containers". It doesn't quite describe it so any suggestions? Maybe objects, but thats kinda different.
Aww, now there's a question I can answer. Believe it or not...This topic can be disastrous if not approached correctly. Even though I hate to say it, it is to my experience that "jumping to classes" is the complete wrong way to go. Even if your class of students already have some experience, they will be left scatter brained when considering
when and
why of objects. For this reason, I would propose an iterative problem solving approach. Though I confess most of your "students" will not favor this, it is to my experience that they will actually
learn to code better in this manner.
The simple truth is...Most of us on these forums are programmers because we fucking love it. Much of what we know is from billions of scattered remnants across the internet, forums, books, etc that we have pieced correctly (and sometimes incorrectly?) through countless hours of leisure coding. While this worked fine for us...You must consider that the kids approaching you in need of "teaching" obviously don't work the same was as you do, or else they wouldn't need a teacher in the first place.
Also, consider every experience you've ever had in a math or physics class. If you simply sit and watch somebody work problems or have it explained very very concisely to you, you will understand everything. You can muse at the easy to follow logic and realize, "Wow, this is easy." Then, in a week, when you sit down to work an "easy" problem, you will likely fumble at where to begin. This is simply because of inactive learning--if you didn't actually work the problems yourself, you will not retain the process without a photographic memory. And with one, you will still have a hard time applying the same logic to slighly altered problems. So, even though programming is very enjoyable to us, it is still a subject bred entirely from logic like math or physics, and must be handled similarly.
For the guys actually willing to learn, in order to teach classes, I would do a 3 part lesson:
1) Assign a very easy to complete program
forcing upon them a procedural approach. Don't even mention the existence of stucts or classes for these first few programs. They are going to quite obviously be "grunt work," but the students actually willing to learn will complete it, so no worries. For the ones that already know of structs or have been coding before, simply explain to them that this is "just practice" and "approaching problems from a different angle," and tell them that they must still do the program as your later programs will expand upon them.
I the subject of this initial program should be Arrays for data containers, and procedural problem solving.
Here's an example of an assignment:
Problem: You are writing a program for a company that is to compute Social Security taxes for a group of employees. The company has requested that you track employee ID, employee Salary, and then compute Social Security taxes based upon the fixed rate of 6.2%, being applied only to employees with salaries less than or equal to $106,800.
Data Requirements: Each employee must be able to contain a 5 character identifier (example: "AD76E"), a yearly salary (ex 107321.32), and the calculated Social Security tax (ex 807.32). These will all be stored in arrays of the appropriate data type.
Program Structure: All processing will be done within your main(), and no variables except constants will be allowed in the global scope.
For the complete noobs: Before assigning this program, they will need to be introduced to the following:
1) Data types
2) Main
3) Const
4) For loops
5) arrays
6) basic operators (assignments, addition, multiplication, etc)
And, in addition to the assignment, be sure to introduce them to tons of PROPER vocabulary, such as "algorithm," "procedural," etc. And, finally, do what avansc has suggeseted: have them draw logic and flow diagrams (make an algorithm) before they try to complete it.
2) For the 1st program, they saw how they can use arrays and (badly formed) procedural programming to solve problems. This next one will introduce them to basic aggregation (don't even bother explaining this to the newer folk, just let 'em work). This will also be helping to work them up to the logical structure of classes, and emphasize the work they do. And finally, they will be modifying the same code, so they will already be gaining experience with 'refactoring.'
Problem: The same company has offered you a 2nd contract to modify and improve your first program. The small changes are as followed: They now want a way to compute average salary, count the number of salaries above and below this average, find the largest and smallest salary, and still maintain the same functionality the first program had. Also, they are having a hard time tracking people by their ghetto 5 digit employee number, so they want a "name" identifier as well.
Data Requirements: At a code review, your boss said that your 1st program was structured horribly. Keeping up with 3 static arrays of employee data? What were you thinking? He wants you to "do it right" in what he calls his "old fashioned" method. Use a "struct" for each employee, and use some goddamned "functions" instead of doing it all in main. A matter of fact, he says that you need to figure out how to do it with your main being less than 10 lines or else you're off the job. Oh, and use a String for the name like a normal person--no more character arrays.
Program Structure: Make atleast one function return thing by reference. Main must be very short--most processing must be done in function. Also, one array of "employee" structs instead of multiple arrays. Make them pass "employees" to every function--they are not allowed to make the array global. (Note: This is VERY important in leading up to classes--when they see how fucking painful it is having to pass employee structs to every function, they'll welcome classes with open arms.)
For the Newbs: be sure to introduce functions correctly, and get it straight in their heads form the start the difference between function signature, definition, declaration. Also, be sure to emphasize things like "in" and "out" parameters (in case they ever end up moving to C# or another language with those reserved words). Be sure to give em good vocab!
3) For this one, do the same king of thing. make them modify it, except use classes and make all of the functions in the employee class. Also, EXPLAIN TO THEM THAT C++ GIVES EACH MEMBER FUNCTION AN EXPLICIT "this" PARAMETER. This will "click" for students, as they just got done painfully having to pass around "employee" objects and arrays.
Finally, to move into inheritance and more advanced topics...Just add to the same damned program. Make the company want distinctions for different types of employees (inheritance), introduce "encapsulation," make it complex...Make "managers" that are "employees" actually contain "linked lists" of other employees they manage, so that they can give out raises...:P
Be creative, and introduce topics through problems.