Questions tagged «overloading»

术语重载和重载可以指:-构造函数和方法重载,一种多态性,其中基于传递的参数的数据类型调用具有相同名称的不同函数-运算符重载,一种函数或方法重载的形式,其中重载的操作是运算符,例如+或-


4
为什么String.valueOf(null)抛出NullPointerException?
根据文档,该方法String.valueOf(Object obj)返回: 如果参数是null,则字符串等于"null"; 否则,obj.toString()返回的值。 但是,当我尝试这样做时,怎么会这样: System.out.println("String.valueOf(null) = " + String.valueOf(null)); 它会抛出NPE吗?(如果您不相信,请自己尝试!) 线程“主”中的异常java.lang.NullPointerException 在java.lang.String。(未知来源) 在java.lang.String.valueOf(未知来源) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗?

5
is_base_of是如何工作的?
以下代码如何工作? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …


11
当非const方法是私有方法时,为什么不调用public const方法?
考虑以下代码: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non - const" << std::endl; } }; int main() { A a; a.foo(); } 编译器错误是: 错误:“ void A :: foo()”是私有的。 但是,当我删除私有文件时,它就可以工作。当非const方法为私有方法时,为什么不调用public const方法? 换句话说,为什么在访问控制之前要进行重载解析?这很奇怪。您认为这是一致的吗?我的代码可以工作,然后添加一个方法,而我的工作代码根本无法编译。


8
当参数为原义null值时,如何选择重载方法?
我在测验中遇到了这个问题, public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } } 该程序的输出为“字符串版本”。但是我不明白为什么将null传递给重载方法会选择字符串版本。字符串变量null是否指向空? 但是,当代码更改为 public class MoneyCalc { public void method(StringBuffer sb) { System.out.println("StringBuffer Verion"); } public …
98 java  overloading 

13
是否应该在C#4.0中使用重载或可选参数声明方法?
我正在看Anders谈论C#4.0和C#5.0的预览,这让我开始思考,何时可选参数在C#中可用,这是声明不需要指定所有参数的方法的推荐方式? 例如,类似FileStream该类的东西有大约十五个不同的构造函数,这些构造函数可以划分为逻辑“族”,例如,字符串中的下面的那些,an中的一个IntPtr和a中的一个SafeFileHandle。 FileStream(string,FileMode); FileStream(string,FileMode,FileAccess); FileStream(string,FileMode,FileAccess,FileShare); FileStream(string,FileMode,FileAccess,FileShare,int); FileStream(string,FileMode,FileAccess,FileShare,int,bool); 在我看来,可以通过以下方法简化这种类型的模式:改为使用三个构造函数,并对可以默认使用的参数使用可选参数,这将使不同的构造函数系列更加不同[注:我知道此更改不会在BCL中完成,我假设是针对这种情况]。 你怎么看?从C#4.0开始,将密切相关的构造函数和方法组作为具有可选参数的单个方法会更有意义,还是有充分的理由坚持传统的多次重载机制?

1
使用+解决lambda的函数指针和std :: function上的模棱两可的重载
在以下代码中,对的第一次调用foo是不明确的,因此无法编译。 第二个+在lambda之前添加,解析为函数指针重载。 #include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} ); // not ambiguous (calls the function pointer overload) } +这里的符号是什么?

3
为什么最负的int值会导致有关歧义函数重载的错误?
我正在学习C ++中的函数重载,并遇到了以下问题: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } 据我了解,该int范围内给出的任何值(在我的情况下int为4字节)都将被调用,display(int)而该范围外的任何值都将是模棱两可的(因为编译器无法确定要调用哪个函数)。int除最小值外,它对于整个值范围均有效,即-2147483648编译失败并显示错误 重载的呼叫display(long int)是模棱两可的 但是对取相同的值int并打印该值将给出2147483648。我真的对这种行为感到困惑。 为什么仅当传递最大负数时才会观察到此行为?(如果将a short与-32768-一起使用,其行为是相同的-实际上,在任何情况下,负数和正数具有相同的二进制表示形式) 使用的编译器:g ++(GCC)4.8.5

5
python中的函数重载了吗?
Python中是否可能有重载函数?在C#中,我会做类似的事情 void myfunction (int first, string second) { //some code } void myfunction (int first, string second , float third) { //some different code } 然后当我调用该函数时,它将根据参数的数量在两者之间进行区分。是否可以在Python中做类似的事情?

8
是否可以覆盖非虚拟方法?
有什么方法可以覆盖非虚拟方法?或产生类似结果的东西(除了创建一个新方法来调用所需的方法之外)? 我想Microsoft.Xna.Framework.Graphics.GraphicsDevice在考虑单元测试的情况下覆盖其中的一种方法。

8
如果我没有在Javascript函数中传递参数会怎样?
我是Java语言的新手,正在尝试编写非常基本的函数,偶然偶然发现了以下示例,并且不确定为什么当我在函数要求时不传递参数时,它为什么可以工作。 样例功能 function myfunction(x) { alert("This is a sample alert"); } 现在,如果我调用该函数,则会myfunction();收到警报。为什么在没有传递参数的情况下,我可以在没有任何错误或警告的情况下调用该函数? 编辑 我没想到会有这么多好答案,而且我现在还无法说出哪个答案是最好的,所以我可以要求人们提出最好的答案,然后我会接受那个人。

7
如果派生类中的基类属性被覆盖,该如何调用基类的属性?
我正在将我的某些类从对getter和setter的广泛使用改为对属性的更pythonic的使用。 但是现在我陷入了困境,因为以前的一些getter或setter方法会调用基类的相应方法,然后执行其他操作。但是,如何通过属性来实现呢?如何在父类中调用属性getter或setter? 当然,仅调用属性本身即可进行无限递归。 class Foo(object): @property def bar(self): return 5 @bar.setter def bar(self, a): print a class FooBar(Foo): @property def bar(self): # return the same value # as in the base class return self.bar # --> recursion! @bar.setter def bar(self, c): # perform the same action # as in the …

4
如何将模块“重新导入”到python,然后在导入后更改代码
我有一个 foo.py def foo(): print "test" 在IPython中,我使用: In [6]: import foo In [7]: foo.foo() test 然后,我将其更改foo()为: def foo(): print "test changed" 在IPython中,调用的结果仍然是test: In [10]: import foo In [11]: foo.foo() test 然后我用: In [15]: del foo In [16]: import foo In [17]: foo.foo() test 我删除了foo.pyc同一个文件夹中foo.py存在的文件夹,但仍然没有运气。 我可以知道如何在运行时重新导入更新的代码吗?

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.