假设我有一个继承自Animal类的类Dog, 你可能想在Dog :: operator =。
中插入对Animal :: operator =的调用最可读/最常用的写作方式是什么?
我想我知道那两个......
static_cast<Animal*>(this)->operator=(other);
和
this->Animal::operator=(other);
答案 0 :(得分:12)
因为你是在子类方法中进行的
Animal::operator=(other);
无需this->
。范围解析语法完全按照请求执行。我没有意识到与演员“间接”做这件事。
另请注意,在一般情况下,使用强制转换执行此操作可能不会产生预期结果,因为它不会禁用虚拟方法调用的动态解析。 (而且,BTW,赋值运算符可以声明为虚拟)。一个明显的结果是,使用虚拟方法,“强制转换”变体可能很容易导致无休止的递归。
答案 1 :(得分:6)
this->Animal::operator=(other);
是正确的方法,你完全限定了引用你的父实现的方法,你不需要自己投射,这会使代码更难阅读。