标签: overloading

Java中的协方差和重载

class A {
   boolean f(A a) { return true; }
}
class B extends A {
   boolean f(A a) { return false; } // override A.f(A)
   boolean f(B b) { return true; }  // overload A.f
}

void f() {  
   A a = new A();
   A ab = new B();
   B b = new B();
   ab.f(a); ab.f(ab); ab.f(b); //(1) false, false, *false*
   b.f(a); b.f(ab); b.f(b);    //(2) false, false, true
}
Run Code Online (Sandbox Code Playgroud)

你能解释一下最后一行的错误输出,为什么不是真的?

java overloading covariance

33
推荐指数
1
解决办法
1323
查看次数

使用模板重载函数

我正在尝试使用模板定义一个函数,并且我希望 typename 为 int 或 anEnum(我定义的特定枚举)。我尝试了以下方法,但失败了:

template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T>
bool isFunction(const T &aVariable){}
Run Code Online (Sandbox Code Playgroud)

我想做的是使用模板,而不是定义两个重载函数。我更喜欢按如下方式调用函数,而程序员不必考虑类型

isFunction(aVariable) // and not isFunction<int> (aVariable) nor isFunction<anEnum> (aVariable)
Run Code Online (Sandbox Code Playgroud)

基本上,我希望这个函数被模板化为 int 和 aNum 类型。我已经搜索过这个,但找不到答案。我可能缺少什么?谢谢,

c++ templates overloading

33
推荐指数
2
解决办法
1686
查看次数

C++中的覆盖和重载

是的,我确实理解它们之间的区别.我想知道的是:为什么OVERRIDE一个方法?这样做有什么好处?在超载的情况下:唯一的优点是你不必用不同的名称思考功能?

c++ overriding overloading

31
推荐指数
3
解决办法
7万
查看次数

重载处理std :: endl?

我想定义一个类,MyStream以便:

MyStream myStream;
myStream << 1 << 2 << 3 << std::endl << 5 << 6 << std::endl << 7 << 8 << std::endl;
Run Code Online (Sandbox Code Playgroud)

给出输出

[blah]123
[blah]56
[blah]78
Run Code Online (Sandbox Code Playgroud)

基本上,我想在前面插入一个"[blah]",然后在每次非终止 后插入std::endl

这里的困难不是逻辑管理,而是检测和重载处理std::endl.有一种优雅的方式来做到这一点?

谢谢!

编辑:我不需要有关逻辑管理的建议.我需要知道如何检测/过载打印std::endl.

c++ iostream overloading manipulators endl

31
推荐指数
2
解决办法
1万
查看次数

为什么接口实现不能返回更具体的类型?

如果接口指定了返回另一个接口的属性或方法,为什么第一个接口的实现不允许将返回类型"更改"为更具体的类型?

我们举一个例子来说明:

interface IFoo
{
    IBar GetBar();
}
interface IBar
{ }

class Foo : IFoo
{
    // This is illegal, we are not implementing IFoo properly
    public Bar GetBar()
    {
        return new Bar();
    }
}

class Bar : IBar
{ }
Run Code Online (Sandbox Code Playgroud)

我知道如何让它发挥作用,这不是我关心的问题.

我可以:

  • 将返回类型更改GetFoo()IBar,或
  • 显式实现接口,只需GetBarIFoo.GetBar()方法调用即可

我真正要问的是不仅允许上面的代码编译的原因.是否有上述情况不符合规定的合同IFoo.

c# overloading language-design interface

31
推荐指数
2
解决办法
2562
查看次数

Java重载和继承规则

我一直在学习,因为我参加了考试,而且我对大多数Java没有太多问题,但我偶然发现了一个我无法解释的规则.这是一段代码片段:

public class A {

    public int method(Object o) {
        return 1;
    }

    public int method(A a) {
        return 2;
    }
}

public class AX extends A {

    public int method(A a) {
        return 3;
    }

    public int method(AX ax) {
        return 4;
    }
}

public static void main(String[] args) {
    Object o = new A();
    A a1 = new A();
    A a2 = new AX();
    AX ax = new AX();

    System.out.println(a1.method(o));
    System.out.println(a2.method(a1));
    System.out.println(a2.method(o));
    System.out.println(a2.method(ax));
}
Run Code Online (Sandbox Code Playgroud)

返回:

1 3 1 …

java inheritance overloading

31
推荐指数
1
解决办法
1万
查看次数

多态性,重载和覆盖类似的概念?

我对多态,重载和覆盖的概念非常困惑,因为它对我来说似乎是一样的.请解释这些概念,它们如何彼此不同

很困惑所以请指导我.

谢谢

oop polymorphism overriding overloading

31
推荐指数
2
解决办法
7万
查看次数

当没有接受long的方法时,为什么java将long参数提升为float/double?

这是一个SSCCE,它演示了描述(恕我直言,怪异)的行为:

public class Test {

   public static void print(int param) {
       System.out.println("int");
   }

   public static void print(float param) {
       System.out.println("float");
   }

   public static void print(Long param) { //<--Wrapper type
       System.out.println("Long");
   }
   public static void main(String[] args) {
       long param = 100L;
       print(param);  // output == float
   }
} 
Run Code Online (Sandbox Code Playgroud)

为什么java会这样做?

java overloading type-conversion

31
推荐指数
4
解决办法
3092
查看次数

为什么函数重载被添加到C++中?

我有一个C背景.我只是想知道为什么函数重载被添加到C++中?C没有函数重载但是C++没有,它需要什么?

当时语言设计师的想法是什么?

c c++ overloading

30
推荐指数
4
解决办法
3157
查看次数

是否可以为重载方法使用不同的返回类型?

在方法重载中,是否可以为重载方法设置不同的返回类型?例如,

void foo(int x) ;
int foo(int x,int y);
double foo(String str);
Run Code Online (Sandbox Code Playgroud)

在一般的面向对象编程中,有可能吗?

overloading

29
推荐指数
6
解决办法
8万
查看次数