Questions tagged «overload»

15
我不明白反对运算符重载的论点
我刚刚读过Joel的其中一篇文章,他说: 通常,我必须承认我有点害怕隐藏事物的语言功能。当您看到代码时 i = j * 5; …至少在C中,您知道j被乘以5,结果存储在i中。 但是,如果您在C ++中看到相同的代码片段,则您一无所知。没有。知道C ++中真正发生的事情的唯一方法是找出i和j是什么类型,这些类型可能在其他地方完全声明。这是因为j可能属于operator*重载类型,并且在您尝试将其乘以乘法时会表现出极大的机智。 (强调我。)害怕隐藏事物的语言功能吗?你怎么会害怕呢?隐藏事物(也称为抽象)不是面向对象编程的关键思想之一吗?每次调用方法时a.foo(b),您都不知道该怎么做。您必须找出什么类型a和b是什么,然后才可能在其他地方声明它们。那么我们应该放弃面向对象的编程,因为它对程序员隐藏了太多的东西吗? 与可能有j * 5什么不同j.multiply(5),您可能必须使用不支持运算符重载的语言编写?再次,您将必须找出方法j内部的类型和peek multiply,因为lo和bekeeper j可能是具有某种multiply方法的类型,该方法执行某些非常机智的操作。 “ Muahaha,我是一个邪恶的程序员,只为一个方法命名multiply,但实际上它是完全晦涩且不直观的,并且与加乘运算绝对无关。” 设计编程语言时是否必须考虑这种情况?然后,我们不得不放弃编程语言中的标识符,理由是它们可能会误导人! 如果您想知道方法的作用,则可以浏览文档或浏览实现内部。运算符重载只是语法糖,我完全不知道它如何改变游戏。 请赐教。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.