operator= and functions that are not inherited in C++?

前端 未结 3 494
心在旅途
心在旅途 2020-11-27 16:02

Until a test I\'ve just made, I believed that only Constructors were not inherited in C++. But apparently, the assignment operator= is not too...

3条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 16:29

    1. Your assignment operator is technically inherited, but then it's hidden by the default copy assignment operator in the derived class. This default copy assignment then tries to call the base class's copy assignment which doesn't exist since you hid it with your own assignment.

    2. The sanest way to resolve this is to not use operator overloading in non-obvious ways (= not meaning copy assignment for example). In this case, don't use operator=: Call it something like assign or set and then it will inherit and not be hidden by the child copy assignment.

    3. These operators are inherited and there are no compiler versions so they will never be automatically hidden like operator=.

    4. It really is only constructors that aren't inherited, and I can't think of any other compiler-generated functions that could hide something from the parent as in operator=.

提交回复
热议问题