The course I am planning now, indeed /is/ the (so-called)
»advanced« course. It was preceded by a »beginner's course«
with about 18 hours and no homework (all exercises are part
of these 18 hours).
The beginner's course (18 hours) had (list abbreviated here):
int; double; literals; char-const-*-literals; operators
(+;*;-;/); how to call functions from the standard
library; expressions; statements; how to define
variables and functions of primitive types like »int« or
»double«; additional operators like »%«; »<«; »?:« and
casts; additional types like »char«, »bool« and arrays;
control structures like »if« and »while«.
Now, I am starting to plan the »advanced course« (this
sometimes will be given in only 12 hours, other times, I
will have 24 hours). I want it to focus on »user-defined
types« (vulgo: object-oriented programming). The advanced
course is intended to start with these two parts:
1st part: using user-defined types that are pre-defined
in the standard library (as ::std::string or ::std::vector).
2nd part: defining new user-defined types
The introduction to various ways to write a definition of a
variable with class type (what I asked about in this thread)
is intended to take place at the beginning of the 1st part
of this »advanced« course.
Your basics course looks like as if it was intended for someone who has
never programmed before (else it would not take 18 hours just to learn
the particular syntax of C++). Anyone who needs to be introduced to the
very basics will very likely need lot's of time to process this input.
And with that I don't mean till the next semester starts, but several
months or even years with actual programming (after all, you taught them
pretty much all there is to know about C). I think that it takes a very
long time to develop an "algorithmic" view on the world, and to realize
which problems can be solved quite easily and which take thousands of
man-years to complete. And, of course, some problems can't be solved at
all...
IMHO, it makes little sense to teach object-orientation to people who
never had written code before. The best you can expect is probably that
they can write some crappy exercise code, but it takes many years to get
to grips with object orientation (or better: how to divide the problem
space into components).
Of course, I can only speak from personal experience. I used to be a
tutor for an introductory programming course (Modula3, Java, Ada95).
This course encompassed 4 Semesterwochenstunden (sorry, don't know how
to translate this), and as soon as objects got introduced, almost
everybody was lost (except for those who were already able to write
programs before they attended this course).
This is probably due to the fact that the idea behind object orientation
becomes evident when you look at a problem space that is complicated
enough. Most courses use some convoluted problems a la "animal->eat()"
which don't make things easier to understand. Quite contrary, such
problems confuse students even more because noone really understands the
actual problem behind such examples.
My advice would be to skip the 2nd part of the second course altogether
or to cut it down to a short overview (without assignments).
Just my 2 cents,
Stuart