C ++定义转换为基类

时间:2014-03-21 18:08:49

标签: c++ type-conversion

我很难定义和使用转换运算符到基类。 请考虑以下事项:

class base 
{
public:
    base(const base&);
    base& operator=(const base&);
    //some stuff
};
class child : public base
{
public:
    operator base() const;
    //some more stuff
};

int main()
{
    child c;
    base b=c;
    b=c;
}

如果我尝试将孩子转换为基础,则永远不会调用operator base()(即使我明确转换)。相反,直接调用基类中的复制构造函数或赋值运算符,而不进行转换。

如果operator base()被分配(或复制)到child,我该如何调用base

1 个答案:

答案 0 :(得分:3)

基类的转换函数在语法上是合法的,但永远不会被调用。从标准草案n3337:

  

12.3.2转换函数[class.conv.fct]§1

     

[...]转换函数永远不会用于转换(可能是   cv-quali fi ed)反对(可能是cv-quali fi ed)相同的对象类型(或   对它的引用),对于(可能是cv-quali fi ed)基类   类型(或对它的引用),或(可能是cv-quali fi ed)void。 [...]

该语言具有不同的从派生到基础的转换机制。阅读object slicing。简单地说 - 它是自动完成的。