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?
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.