可以使用以下代码继承基类的所有构造函数:
class DerivedClass : public BaseClass {
public:
using BaseClass::BaseClass;
...
};
是否可以以类似的方式继承所有操作符(一行)?
无法编译的特定代码:
#include <string>
#include <memory>
using std::string;
struct A : string
{
using string::string;
};
int main()
{
std::shared_ptr<string> str;
*str = 'a';
std::shared_ptr<A> a;
*a = 'a'; // err: E0349 no operator "=" matches these operands
}
如果我像这样编写类,那么上面的代码将编译并运行:
struct A : string
{
using string::string;
using string::operator=;
};
1条答案
按热度按时间omhiaaxx1#
所有成员函式(包括运算子多载)都会遵循成员函式的一般继承规则来继承。
就像@sklott提到的,如果函数在派生类中被隐藏(如名称相同,但参数不同等),则需要从基类隐式地拉入函数。
在本例中,默认赋值运算符
A
隐藏了赋值运算符string
,因此必须通过using
显式注入这些赋值运算符。