I have read the <c++ primer> carefully again.
And entirely understand this issue.
Thanks a lot! :)
John Love-Jensen ??:
Hi Fan Lu,
Do the copy assignment operator and copy constructor in derived class
will automatically invoke the corresponding functions in base class?
Yes and no.
YES. The C++ generated synthetic assignment operator and copy constructor in
derived classes will automatically invoke the corresponding function in the
base class.
NO. If you provide your own assignment operator and copy constructor, you
have to invoke the corresponding functions from the base class explicitly.
Or I need explicit invoke the A:A or A& operator= in B:B or B& operator=?
Yes and no.
YES, for your explicit ones, assuming that doing so it the "right thing to
do" for your class.
NO, for the synthesized ones (but if you are using the synthesized ones in
your derived classes, you wouldn't be able to explicitly do it anyway),
since the synthesized ones will do that for you. (Which *MAY* be the "wrong
thing to do" in some circumstances.)
HTH,
--Eljay
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
A() { cout << "A default constructor" << endl; }
A(A const&) { cout << "A copy constructor" << endl; }
A& operator=(A const&) { cout << "A assignment operator" << endl; }
};
class B : public A
{
public:
B() { cout << "B default constructor" << endl; }
B(B const&) { cout << "B copy constructor" << endl; }
B& operator=(B const&) { cout << "B assignment operator" << endl; }
};
int main()
{
cout << "----------------" << endl;
cout << "Test copy constructor..." << endl;
B b1;
B b2(b1);
cout << "----------------" << endl;
cout << "Test assignment operator..." << endl;
b2 = b1;
cout << "----------------" << endl;
}