Assignment operator not available in derived class

  • A+
Category:Languages

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.

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: