Questions tagged «overloading»

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

11
按返回类型重载
我在这里读了一些关于此主题的问题,这似乎令我感到困惑。我刚刚开始学习C ++,还没有研究模板或运算符重载等。 现在有一种简单的过载方法 class My { public: int get(int); char get(int); } 没有模板或奇怪的行为?还是我应该 class My { public: int get_int(int); char get_char(int); } ?
80 c++  overloading 

4
C ++重载虚函数警告
当编译以下代码时,clang发出警告: struct Base { virtual void * get(char* e); // virtual void * get(char* e, int index); }; struct Derived: public Base { virtual void * get(char* e, int index); }; 警告是: warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual] (当然需要启用上述警告)。 我不明白为什么。请注意,取消注释Base中的同一声明会关闭警告。我的理解是,由于两个get()函数具有不同的签名,因此无法隐藏。 c是正确的吗?为什么? 请注意,这是在运行最新版本Xcode的MacOS X上。 clang --version Apple LLVM version 5.0 …



3
如何使用反射来调用.NET中的重载方法
有没有一种方法可以使用.NET(2.0)中的反射来调用重载方法。我有一个应用程序,该应用程序可以动态实例化从通用基类派生的类。出于兼容性目的,此基类包含2个同名的方法,一个带有参数,另一个不带参数。我需要通过Invoke方法调用无参数方法。现在,我得到的只是一个错误,告诉我我正在尝试调用一个模棱两可的方法。 是的,我可以将对象强制转换为基类的实例,然后调用所需的方法。最终将发生这种情况,但是现在,内部复杂性是不允许的。 任何帮助将是巨大的!谢谢。

3
为什么WCF中不允许方法重载?
假设这是一个 ServiceContract [ServiceContract] public interface MyService { [OperationContract] int Sum(int x, int y); [OperationContract] int Sum(double x, double y); } C#中允许方法重载,但是WCF不允许您重载operation contracts 托管程序将InvalidOperationException在托管时抛出
75 c#  .net  wcf  overloading 

1
为什么这是多余的?
我有以下重载的方法: string Call(string function, Dictionary<string, object> parameters, object body) string Call(string function, Dictionary<string, object> parameters, JObject body) 现在,我添加了另一个重载: string Call(string function) { return Call(function, null, (JObject) null); } 我添加了强制类型转换,JObject以便编译器知道应该使用哪个重载。但是Visual Studio告诉我,转换是多余的。但是为什么没有演员阵容我的电话就不会模棱两可?

2
为什么编译器将“ char”匹配为“ int”而不是“ short”?
我有一个小程序: #include<iostream> using namespace std; void f(int) { cout << "int\n"; } void f(short) { cout << "short\n"; } int main(void){ char c = 0; f(c); return 0; } 它打印int。我觉得,如果这是因为“整数提升”,为什么不是short首选? 我也知道整数提升发生在表达式中(例如A = B)。但是我没有表达对f(),权利的呼吁吗? 如果这是关系到重载解决规则,为什么传递char到F将导致到编译器宁愿int到short? 如果我删除的f(int)话f(c)会打电话给f(short)! 因此,总而言之,我的问题是,它与“整数提升”还是“过载解决规则”有关?又为什么呢

7
如何创建一个接受可变数量参数的Java方法?
例如,Java自身String.format()支持可变数量的参数。 String.format("Hello %s! ABC %d!", "World", 123); //=> Hello World! ABC 123! 我怎样才能使自己的函数接受可变数量的参数? 后续问题: 我真的想为此方便快捷: System.out.println( String.format("...", a, b, c) ); 这样我就可以这样称呼它: print("...", a, b, c); 我该如何实现?

2
Varargs Java歧义调用
我对Java的varargs方法有些困惑: public static int sum(int ...a) { return 0; } public static double sum(double ...a) { return 0.0; } 当我尝试sum()不传递任何参数的情况下进行调用时,将int调用方法的版本。我不明白为什么;通常,编译器必须引发错误。 相比之下,当我尝试sum不带任何参数的情况下,以下代码会生成编译器错误: public static int sum(int ...a) { return 0; } public static boolean sum(boolean ...a) { return true; }

6
main()在C ++中是否已重载?
中main()存在2个有效版本C++: int main() // version 1 int main(int argc, char **argv) // version 2 但是,两个过载不能同时存在。为什么不?(可能的用例:从终端运行程序时,如果未传递任何参数,则调用第一个版本,否则调用第二个版本。) 编译器是否执行特殊检查以允许每个二进制文件仅允许一个版本?
69 c++  overloading  main 

5
为什么我的日志在std名称空间中?
在下面的代码中,我定义了一个平凡的log函数。在main我尽量不叫它; 我打电话std::log。然而,我自己log被称为;然后我看到“日志!” 在屏幕上。有人知道为什么吗?我使用G ++ 4.7和clang ++ 3.2。 #include <iostream> #include <cmath> double log(const double x) { std::cout << "log!\n"; return x; } int main(int argc, char *argv[]) { std::log(3.14); return 0; }

11
Scala双重定义(2种方法具有相同的类型擦除)
我在scala中编写了此代码,但无法编译: class TestDoubleDef{ def foo(p:List[String]) = {} def foo(p:List[Int]) = {} } 编译器通知: [error] double definition: [error] method foo:(List[String])Unit and [error] method foo:(List[Int])Unit at line 120 [error] have same type after erasure: (List)Unit 我知道JVM没有对泛型的本机支持,所以我理解此错误。 我可以写包装器List[String],List[Int]但是我很懒:) 我对此表示怀疑,但是还有另一种表达方式与之List[String]不同List[Int]吗? 谢谢。

4
使用模板重载功能
我正在尝试使用模板定义函数,并且我希望类型名是int或anEnum(我已定义的特定枚举)。我尝试了以下操作,但失败了: template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T> bool isFunction(const T &aVariable){} 我正在尝试使用模板,而不是定义两个重载函数。我希望函数可以按以下方式调用,而程序员不必考虑类型 isFunction(aVariable) // and not isFunction<int> (aVariable) nor isFunction<anEnum> (aVariable) 基本上,我希望将此函数作为int和aNum类型的模板。我已经搜索过了,但是找不到答案。我可能会缺少什么?谢谢,

6
通过C ++中的重载构造函数初始化未知类型的变量
来自主要来自python的背景,我在使用C ++类型方面有些挣扎。 我试图通过几个采用不同类型作为参数的重载构造函数之一来初始化类变量。我已经读到使用auto关键字可以用于变量的自动声明,但是在我的情况下,直到选择构造函数后,它才会被初始化。但是,编译器对不初始化并不满意value。 class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; 在python中,它可能看起来像: class Token(): def …

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.