首页 > 解决方案 > 在派生类中使用复制赋值

问题描述

cppreference

因为总是为任何类声明复制赋值运算符,所以基类赋值运算符总是隐藏的。如果使用 using-declaration 从基类引入赋值运算符,并且其参数类型可以与派生类的隐式赋值运算符的参数类型相同,则 using-declaration 也被隐式隐藏宣言。

据我了解,以下代码不应编译。因为

  1. B::operator=(const B&) 是隐式声明的。
  2. A::operator=(const A&) 和 using-declaration 都是隐藏的。
#include <iostream>
using namespace std;

class A { 
 public:
    A& operator=(const A& A) {
        cout << "A::opreator=" << endl;
    }   
};

class B : A { 
 public:
    using A::operator=;
};

int main() {
    A a1; 
    B b1; 
    b1 = a1; 
}

但是,它编译成功并打印“A::operator=”,为什么?

标签: c++c++11copy-assignment

解决方案


您无法隐藏复制赋值运算符 of,B因为您提到的两个运算符都采用不同的参数。


推荐阅读