So I've been helping my girlfriend in the intro C++ class she's taking and I have some things to say to you teachers. TEACH!! Oh, and while you're at it LEARN C++!!
Ok, I get that you want to teach operator overloading, thats fine. Its a handy trick, it makes the program more readable, but please do not teach the students to overload the stream operators. I can think of at least three different practical ways to overload the stream operators, plus some others that would be just plain stupid; I'm pretty sure there are a few others that I don't even know about. Now, in order to understand some of these methods, one must really have a good grasp of the class concept, which no one ever does in an intro programming course.
And that brings me to my next complaint: class versus struct. I guess I can live with the fact that teachers don't want there students to use structs. There are definitely times when a struct is the right way to go, but that if they want to save that lecture for a higher level class, fine. But if you're going to make the argument that a class should be used over a struct because classes are private and allow for data hiding, then DON'T TEACH YOUR STUDENTS TO MAKE A GET AND SET FUNCTION FOR EVERY SINGLE PRIVATE VARIABLE. It completely defeats the purpose. If data is meant to be changed, then create functions to change the data as necessary and teach students to enforce rules in these functions so that only valid data can be entered. Any data that is not meant to be changed should be assigned in a constructor or some kind of OpenFromFile()/GetUserInput() function. If data is to be displayed, it should be displayed in a formatted way. Rather than have all those pesky "get" functions, make a Print() function that returns an std::string.
Ah, the std namespace. Now there's a topic that definitely requires attention. Specifically, <string> and <vector>. Teachers: c-strings and arrays are, well, a pain in the ass. I understand why you teach them, but at the end of the week, set your students free, let them use strings and vectors. Oh, and if you think about dynamic arrays, leave "new" and "delete" for the teachers who weren't forced to teach the intro course. Memory allocation is something that doesn't make sense to a lot of people until they've been programming a while and have of your students might never program again. Teach them what they need to know and what they can understand, not all of the most painful parts of the language.
Now, I'm not going to go into much detail here, but it seems to me that teachers should understand the topics they're teaching. Four years ago, my intro to C++ teacher litterally told me that what the code in front of me was doing was not the way C++ was supposed to work. People, you can't be wrong when you're teaching C++, the students will notice!
I may have more to say on this topic in the next few days, but I feel better for now.