在C ++中调用mother-class operator =的常用方法?

时间:2009-11-12 14:44:42

标签: c++ inheritance operators conversion-operator

假设我有一个继承自Animal类的类Dog, 你可能想在Dog :: operator =。

中插入对Animal :: operator =的调用

最可读/最常用的写作方式是什么?

我想我知道那两个......

static_cast<Animal*>(this)->operator=(other);

this->Animal::operator=(other);

2 个答案:

答案 0 :(得分:12)

因为你是在子类方法中进行的

Animal::operator=(other);

无需this->。范围解析语法完全按照请求执行。我没有意识到与演员“间接”做这件事。

另请注意,在一般情况下,使用强制转换执行此操作可能不会产生预期结果,因为它不会禁用虚拟方法调用的动态解析。 (而且,BTW,赋值运算符可以声明为虚拟)。一个明显的结果是,使用虚拟方法,“强制转换”变体可能很容易导致无休止的递归。

答案 1 :(得分:6)

this->Animal::operator=(other);是正确的方法,你完全限定了引用你的父实现的方法,你不需要自己投射,这会使代码更难阅读。