Questions tagged «method-overloading»

10
仅将C ++编译器用于函数重载是不好的做法吗?
因此,我正在针对某个处理器使用C进行软件设计。该工具包包括编译C和C ++的功能。对于我正在做的事情,在这种环境下没有可用的动态内存分配,并且该程序总体上非常简单。更不用说该设备几乎没有处理器能力或资源。实际上,根本不需要使用任何C ++。 话虽这么说,我在一些地方进行函数重载(C ++的功能)。我需要发送几种不同类型的数据,并且不想使用printf带有某种%s(或其他任何一种)参数的样式格式。我见过有些人无法使用C ++编译器执行此操作printf,但就我而言,可以使用C ++支持。 现在,我确定可能会遇到一个问题,即为什么我需要重载一个函数。因此,我将尝试立即回答。我需要从串行端口传输不同类型的数据,所以我有一些重载,可以传输以下数据类型: unsigned char* const char* unsigned char const char 我只希望没有一种方法可以处理所有这些事情。当我呼吁我只是希望它传递出串行端口的功能,我没有很多资源的,所以我不想做几乎没有任何事情,但我的传送。 有人看到了我的程序,问我:“为什么要使用CPP文件?” 所以,这是我唯一的原因。那是不好的做法吗? 更新资料 我想回答一些问题: 解决您的困境的客观答案取决于: 如果使用C ++,可执行文件的大小是否会显着增加。 截至目前,可执行文件的大小占用了4.0%的程序内存(5248字节)和8.3%的数据内存(342字节)。也就是说,为C ++编译...我不知道对于C会是什么样子,因为我没有使用过C编译器。我确实知道该程序不会再增长了,所以对于资源的有限程度,我会说我还可以... 如果使用C ++,是否会对性能产生明显的负面影响。 好吧,如果有的话,我什么都没注意到...但是那又可能是为什么我问这个问题的原因,因为我不太了解。 代码是否可以在只有C编译器可用的其他平台上重用。 我知道,对此的答案肯定不是。实际上,我们正在考虑使用其他处理器,但仅考虑使用功能更强大的基于ARM的处理器(事实上,我所知道的所有处理器都具有C ++编译器工具链)。

2
为什么PHP不支持函数重载?
我想知道编程语言的主要功能之一是否能够通过参数重载函数。我认为这是面向对象编程必不可少的内容。 它是故意遗留下来并且不允许的吗?还是超载不是一个好习惯?

5
仅通过参数名称(而不是类型)来区分方法是否足够?
仅通过参数名称(而不是类型)来区分方法就足够了吗?还是更明确地命名呢? 例如T Find<T>(int id)VS T FindById<T>(int id)。 是否有充分的理由更明确地命名(即添加ById)而不是仅保留参数名称? 我能想到的一个原因是方法的签名相同但含义不同。 FindByFirstName(string name) 和 FindByLastName(string name)

2
为什么采用数量不受限制的参数的方法通常会定义带有较少参数的重载?
例如,System.IO.Path.Combine.NET中的方法具有以下重载: Combine(params String[]) Combine(String, String) Combine(String, String, String) Combine(String, String, String, String) 最后三点是什么? 第一个将覆盖所有内容,就好像您仔细观察一样,它使用的是params关键字。向后兼容的论点仅涵盖该Combine(String, String)变体,因为它是.NET 4之前的唯一版本。

12
方法重载除了语法糖之外吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 方法重载是一种多态吗?对我来说,似乎只是名称相同和参数不同的方法的区别。因此stuff(Thing t),stuff(Thing t, int n)就编译器和运行时而言,它们是完全不同的方法。 它在调用方方面产生了一种幻觉,即对相同类型的对象(即多态)的作用不同。但这只是一种幻想,因为实际上stuff(Thing t)和stuff(Thing t, int n)完全不同。 方法重载除了语法糖之外吗?我想念什么吗? 语法糖的一个常见定义是它纯粹是局部的。意思是将一段代码更改为“加糖的”等效代码,反之亦然,这涉及不影响程序整体结构的局部更改。而且我认为方法重载完全符合此标准。让我们看一个示例来演示: 考虑一个类: class Reader { public String read(Book b){ // .. translate the book to text } public String read(File b){ // .. translate the file to text } } 现在考虑使用该类的另一个类: /* might not be the …

4
我们应该重命名重载的方法吗?
假定包含以下方法的接口: Car find(long id); List<Car> find(String model); 像这样重命名它们更好吗? Car findById(long id); List findByModel(String model); 实际上,使用此API的任何开发人员都无需查看接口即可知道初始find()方法的可能参数。 所以我的问题更笼统:在代码中使用重载方法有什么好处,因为它会降低可读性?

3
一种方法会使另一种方法超载,还是两种方法都“超载”
如果我创建此方法 public void foo() 然后我创建一个像这样的重载版本 public void foo( string bar ) 我们是说第二个函数重载了第一个函数,还是两个方法都同样“重载了”? 这意味着(我认为),存在一个基本类型的函数,该函数正在被另一个函数重载(有点像继承,但不是真的)。 假设一种方法可以“超载另一种”,那么即使这只是一个词,也将暗示诸如“ overloader”和“ overloadie”之类的术语。但这根本感觉不对,尤其是因为您可能会有多个重载。 当我想记下创建重载方法的过程并且想要最正确的记下来方法时,我遇到了这个问题。 例子: 我超载 foo 我重载foo用foo( string bar ) 我正在创建一个重载方法 我正在使foo超载 是的,这让我思考,我不确定该怎么做。在线上有成百上千的函数重载的描述,即使不是成千上万的描述,但是乍一看,我找不到任何解决方法。

1
为什么没有工具可以在PHP中重载静态属性?
介绍 PHP使您可以通过在类中声明魔术方法来重载方法调用和属性访问。这将启用以下代码: class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" 除了重载实例属性和方法外,从PHP 5.3.0开始,我们还可以static通过覆盖magic方法来重载方法调用__callStatic。 缺少的东西 可用功能中明显缺少的是过载静态属性的能力,例如: echo Foo::$missingProperty; // fatal error: access to undeclared static property 此限制已明确记录在案: 属性重载仅在对象上下文中起作用。这些魔术方法不会在静态上下文中触发。因此,不应声明这些方法static。从PHP 5.3.0开始,如果声明了一种魔术重载方法,则会发出警告static。 但为什么? 我的问题是: 是否出于技术原因当前不支持此功能?还是(颤抖的)政治原因? 过去是否有过任何中止尝试添加此功能的尝试? 最重要的是,问题不是 “如何在userland PHP中具有动态静态属性?”。也就是说,如果您知道__callStatic要共享的特别可爱的实现,则一定要这样做。

2
重载或可选参数
当我有一个可能会或可能不会收到某个参数的函数时,重载该函数或添加可选的args更好吗? 如果每个都有它的起伏-我什么时候使用它们?

3
方法重载什么时候合适?
假设我正在开发一个现有的,相当大的系统。我有一个myObject类的对象MyClass(出于示例的原因,假设我正在Java中工作)。myObject是一种含有一种组合物Collection,比方说,一个List和其它目的(我认为)是无关紧要的。它包含委托方法,这些委托方法仅用于调用List它所组成的方法,以确保List它所具有的不暴露(对不起,如果我的术语错误)。 假设这List是一个,List<String>但是由于某种原因,主要的访问方法是class的mask方法SomeOtherClass。如果要在其中插入一个新的值对List,则需要一个SomeOtherClass名为的对象someObject。我会打电话给,myObject.insert(someObject)并且在insert方法内部将有一些魔术可以检索String到中放入List<String>。 现在假设我只有一个String值,没有SomeOtherClass要插入的对象。假设我无法修改该insert方法,因为它会破坏系统中的所有内容。那我应该重载该insert方法吗?还是应该在SomeOtherClass每次调用时创建一个新对象insert? 我想如果我确实超载了,它会看起来像这样…… public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (此示例是一个人为的难题,它基于我昨天遇到的关于超载的类似(稍微复杂一些)情况。如果有不清楚的地方,我将对其进行扩展) 这是重载方法的合适地方吗?如果没有,我什么时候应该重载方法?

5
为什么不允许使用返回类型进行重载?(至少使用常用语言)
我不了解所有编程语言,但很明显,通常不支持考虑到方法的返回类型(假设其参数具有相同的数字和类型)而重载方法的可能性。 我的意思是这样的: int method1 (int num) { } long method1 (int num) { } 这并不是编程的大问题,但在某些情况下,我会对此表示欢迎。 显然,如果没有区分所调用方法的方法,这些语言将无法支持它,但是其语法可能像[int] method1(num)或[long] method1(num)这样简单。这样,编译器将知道哪个将被调用。 我不知道编译器是如何工作的,但这看起来并不难,所以我想知道为什么通常不会实现这样的事情。 为什么不支持类似的原因是什么?
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.