Константин Фомин Asked:2020-10-14 14:42:27 +0800 CST2020-10-14 14:42:27 +0800 CST 2020-10-14 14:42:27 +0800 CST 重载操作的继承 772 基类中的操作重载是否传递给继承者的类? c++ 2 个回答 Voted Best Answer yrHeTateJlb 2020-10-14T17:05:01+08:002020-10-14T17:05:01+08:00 正如我从问题和评论中了解到的那样,您对是否可以operator=()从基类访问类中的继承人感兴趣。不,它将不可用。原因是编译器隐式创建了一个复制赋值运算符,隐藏了所有继承的重载operator=()。要解决这个问题,可以使用using-om: struct A{ int i; void operator =(int value){ i = value; } }; struct B : A{ using A::operator =; }; 应该不是其他运营商的问题。 Eugene Magdalits 2020-10-14T16:20:26+08:002020-10-14T16:20:26+08:00 据我从问题中了解到,您对是否将重载函数(即具有多个签名)传递给继承人感兴趣。如果使用继承,它们将被传递public(就像非重载函数一样): struct Base { int foo(int a); int foo(double a); }; struct Derived : public Base { // Наследует int foo(int a); // Наследует int foo(double a); }; 但这条规则不适用于构造函数、析构函数和赋值运算符。它们必须显式定义,或(自 C++11 起)显式继承——否则编译器将自动生成它们,覆盖父代。与此相关的是您在评论中链接到的问题。
正如我从问题和评论中了解到的那样,您对是否可以
operator=()
从基类访问类中的继承人感兴趣。不,它将不可用。原因是编译器隐式创建了一个复制赋值运算符,隐藏了所有继承的重载operator=()
。要解决这个问题,可以使用using
-om:应该不是其他运营商的问题。
据我从问题中了解到,您对是否将重载函数(即具有多个签名)传递给继承人感兴趣。如果使用继承,它们将被传递
public
(就像非重载函数一样):但这条规则不适用于构造函数、析构函数和赋值运算符。它们必须显式定义,或(自 C++11 起)显式继承——否则编译器将自动生成它们,覆盖父代。与此相关的是您在评论中链接到的问题。