这可能是一个关于继承的愚蠢问题,但对于我不允许这样做的原因并没有多大意义。我继承的基类是std::string
:
class A : public std::string
当我使用class A
时,我想这样做:
A text;
std::string str = "hello";
text = str;
编译器抱怨没有二进制运算符=
来执行此操作。
我想从字符串继承的原因是添加一些额外的功能,但不会丢失默认情况下提供的功能std::string
。
是否有理由不能自动将基类分配给子类?
感谢。
答案 0 :(得分:4)
您不能继承赋值运算符,它们会得到特殊处理。您可以使用using
将它们从基类中删除。
此外,除了iostream之外,继承标准提供的类是非常糟糕的。
答案 1 :(得分:3)
是否有理由不能自动将基类分配给子类?
是。这是因为基类不是子类。你只能指定相反的方法:将子类实例分配给基类实例就可以了,因为子类是基类。
这是一般规则;另一个答案解释了std::string
的具体错误。