A question about complier for C++

John Love-Jensen eljay@adobe.com
Wed Jun 25 14:07:00 GMT 2008


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;
}



More information about the Gcc-help mailing list