我很难定义和使用转换运算符到基类。 请考虑以下事项:
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
?
答案 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。简单地说 - 它是自动完成的。