在C++中调用母类operator=的常见方法?

发布于 2024-08-11 04:04:27 字数 280 浏览 12 评论 0原文

假设我有一个 Dog 类,它继承自 Animal 类, 您可能想在 Dog::operator= 中插入对 Animal::operator= 的调用。

最易读/最常见的编写方式是什么?

我想我认识那两个……

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

而且

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

Let's suppose I have a class Dog that inherits from class Animal,
you might want to insert a call to Animal::operator= in Dog::operator=.

What is the most readable/common way to write it?

I think I know those two...

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

and

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

染年凉城似染瑾 2024-08-18 04:04:27

由于您是在子类方法中执行此操作,因此

Animal::operator=(other);

不需要 this->。范围解析语法完全按照要求执行。我不认为通过强制转换“间接”进行此操作有什么意义。

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

Since you are doing it from within a child class method

Animal::operator=(other);

No need for this->. The scope resolution syntax does exactly what was requested. I don't see a point in doing it "indirectly" with a cast.

Note also that doing it with a cast might not produce the expected result in general case, since it will not disable the dynamic resolution of virtual method call. (And, BTW, assignment operator can be declared virtual). An obvious consequence of that is that with virtual methods the "cast" variant might easily result in endless recursion.

蒲公英的约定 2024-08-18 04:04:27

this->Animal::operator=(other); 是正确的方法,您完全限定了引用父实现的方法,您不需要为此进行强制转换,这使得代码更难阅读。

this->Animal::operator=(other); is the correct way, you fully qualify the method referring to your parent implementation, you don't need to cast yourself for that and it makes the code harder to read.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文