initialization v. assignment
foo::operator=(&foo)
vs.
foo::foo(foo&) (copy
constructor)
foo
x; // calls foo::foo ()
foo f = x; // calls
foo::foo(foo&)
foo x, f; // calls
no-argument constructor
f = x; // calls
operator=
foo
a, c, d; // calls foo::foo () 3 times
bar b; // calls bar::bar()
foo y = a //calls foo::foo(foo&)
foo z = b // calls foo::foo(bar&)
...
c = a; // calls foo::operator=(foo&)
d = b; // calls
foo::operator=(bar&)