Search code examples
c++inheritanceassignment-operator

Assignment operator not available in derived class


The assignment operator in base class does not seem to be available in derived class. Given this code:

#include <iostream>

class A{
    int value;
public:
    A& operator=(int value){
        this->value = value;
        return *this;
    }
};

class B : public A{};

int main(){
    B b;
    b = 0; // Does not work
    return 0;
}

GCC 6.4 says:

error: no match for 'operator=' (operand types are 'B' and 'int')

What is happening?


Solution

  • Every class has at least one assignment operator implicitly defined when we don't provide one ourselves.

    And when a member function in a derived class is defined with the same name as a member in the base class, it hides all the base class definitions for that name.

    You can use a using declaration, but be warned that it will pull all the members named operator= and allow code like this:

    A a;
    B b;
    b = a;
    

    Which is slightly dubious.