将基类分配给子类时的继承C ++问题

时间:2011-08-04 15:49:43

标签: c++ inheritance operators operator-overloading

这可能是一个关于继承的愚蠢问题,但对于我不允许这样做的原因并没有多大意义。我继承的基类是std::string

class A : public std::string

当我使用class A时,我想这样做:

A text;
std::string str = "hello";
text = str;

编译器抱怨没有二进制运算符=来执行此操作。

我想从字符串继承的原因是添加一些额外的功能,但不会丢失默认情况下提供的功能std::string

是否有理由不能自动将基类分配给子类?

感谢。

2 个答案:

答案 0 :(得分:4)

您不能继承赋值运算符,它们会得到特殊处理。您可以使用using将它们从基类中删除。

此外,除了iostream之外,继承标准提供的类是非常糟糕的。

答案 1 :(得分:3)

  

是否有理由不能自动将基类分配给子类?

是。这是因为基类不是子类。你只能指定相反的方法:将子类实例分配给基类实例就可以了,因为子类是基类。

这是一般规则;另一个答案解释了std::string的具体错误。