Assignment Operator Problem on Based and Derived Class

Discussion in 'C++' started by yccheok, Sep 11, 2008.

  1. yccheok

    yccheok Guest

    Hello all, I am confused on the correct assignment operator that
    should be implemented on the derived class. I refer to the document
    found at :-

    which the author recommence not using "virtual" for assignment
    operator. Hence, I provide the following implementation.

    #include <iostream>

    using namespace std;

    class B {
    B(int i) : b(i) {}

    B& operator=(const B& me) {
    if(&me == this) return *this;

    b = me.b;

    cout<< "b assignment"<< endl; return *this;

    virtual void fun() { cout<< "b: " << b << endl; }

    int b;


    class D: public B {
    D(int i) : B(i), d(i) {}

    D& operator=(const D& me) {
    if(&me == this) return *this;

    d = me.d;

    B::eek:perator =(me); cout<< "d assignment"<< endl; return *this;

    virtual void fun() { B::fun(); cout<< "d: " << d << endl; }

    int d;

    int main()
    cout<< "main"<< endl;

    B* b0 = new D(100);
    B* b1 = new D(200);

    (*b0).fun(); // "b: 100"
    // "d: 100"
    // printed. Correct behavior.

    *b0 = *b1; // "b assignment" printed. is this the correct
    // shall we expected "b assignment", followed by "d assignment"
    // to be printed? If yes, what shall be the correct

    (*b0).fun(); // "b: 200"
    // "d: 100"
    // printed. Now the result is "half-baked". The based class are
    // being assigned properly. However, the child class is not

    delete b0;
    delete b1;

    It seems that for me, the assignment operator implementation for
    derived class is not correct (At least it shall not produce "half-
    baked result) May I know what shall the correct implementation for
    that? Any suggestion are welcomed.


    yccheok, Sep 11, 2008
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.