相关疑难解决方法(0)

为什么在区分方法时不考虑返回类型?

可能重复:
Java - 为什么没有基于返回类型的方法重载?

在区分方法时,编译器不考虑返回类型,因此即使它们具有不同的返回类型,也不能使用相同的签名声明两个方法.
Java教程

为什么是这样?

java overloading

5
推荐指数
1
解决办法
629
查看次数

为什么即使返回类型不同,也不能使用相同的签名声明两个方法?

重复:函数重载按返回类型?


也许这是一个非常愚蠢的问题,但我不明白为什么我不能声明两个具有相同签名的方法,当它们具有不同的返回类型时.

public class MyClass
{
    private double d = 0;

    public double MyMethod()
    {
        return d;
    }

    public string MyMethod()
    {
        return d.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误,指出该类已经定义了具有相同参数类型的成员.

(显然,我在我的代码中使用它的方式并不像我的示例代码那么简单......但我认为它可以解决这个问题.)

我是否遗漏了有关OO设计的内容,这使得我正在尝试做一个OOP反模式?当然,编译器应该能够确定我尝试使用哪种方法,只要我具体告诉它我想要哪一种方法.

鉴于MyClass myClass = new MyClass();我希望以下代码可以工作:

double d = myClass.MyMethod();
string s = myClass.MyMethod();
Run Code Online (Sandbox Code Playgroud)

我希望以下代码有问题:

var v = myClass.MyMethod();
Run Code Online (Sandbox Code Playgroud)

但即使在var它的情况下也应该导致编译错误.

谁能看到我在这里做错了什么?我很高兴得到纠正.:-)

c# method-signature

4
推荐指数
2
解决办法
9329
查看次数

函数重载没有在C++中发生

我正在使用borland turbo C++编译器(4.5).这是我的代码,但我得到的错误如下:'time :: add(time)'的多个声明.这里我重载了add()三次错误来自第3次重载,即"void add(time) T1)".

 #include<iostream.h>
 #include<conio.h>
 class time
 {
 int h,m;
 public:
 void input()
 {
    cout<<"\n Enter hour :";
    cin>>h;
    cout<<"\n Enter min :";
    cin>>m;
 }
 void display()
 {
    cout<<"\n time is : "<<h<<":"<<m;
 }
 void add(time t1,time t2)
 {
    h=t1.h+t2.h+(t1.m+t2.m)/60;
    m=(t1.m+t2.m)%60;
 }
 time add(time t1)
 {
     time t3;
     t3.h=h+t1.h+(m+t1.m)/60;
     t3.m=(m+t3.m)%60;
     return t3;
 }
 void add(time t1)
 {
    h=h+t1.h+(m+t1.m)/60;
    m=(m+t1.m)%60;
 }
 };
 int main()
 {
    time t1,t2,t3;
    t1.input();
    t2.input();
    t3.add(t1,t2);
    t3.display();
    t3=t2.add(t1);
    t3.display();
    t2.add(t1);
    t2.display();
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
2
解决办法
390
查看次数

C++新手问题:设计一个函数来返回字符串或双重过载或模板的向量?

我编写了一个在文本文件中搜索名称的函数.它返回向量,其中向量的每个元素是不同的名称.

现在我想在同一个文本文件中搜索数字并在向量中返回数字.

这可能是一个愚蠢的问题,但我想知道最好的方法是什么.通过编写第二个函数来重载函数,该函数返回向量或通过将类型替换为T来将我已经写入的函数转换为模板,如向量中所示.

我感到困惑的模板选项的原因是,我不知道,如果字符串和数值类型,如双和INT是在模板兼容.任何提示将不胜感激!谢谢.

c++ templates overloading

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

与具有相同名称和不同返回类型的成员的接口

为什么我不能做以下事情?

public interface ICommunication
{
    int Send(Dictionary<string, string> d);
    int Send(byte[] b);

    Dictionary<string, string> Receive();
    byte[] Receive(); // Error
}
Run Code Online (Sandbox Code Playgroud)

符号Receive()是不同的,但参数是相同的.为什么编译器会查看参数而不是成员签名?

ICommunication'已经定义了一个名为'Receive'的成员,它具有相同的参数类型.

我怎么能绕过这个?

我可以重命名Receive()如下,但我更喜欢保持命名Receive().

public interface ICommunication
{
    int Send(Dictionary<string, string> d);
    int Send(byte[] b);

    Dictionary<string, string> ReceiveDictionary();
    byte[] ReceiveBytes(); 
}
Run Code Online (Sandbox Code Playgroud)

.net c# interface method-signature

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

让函数返回C++类中的任何类型

我有这门课:

#define TYPE_INVALID 0x00
#define TYPE_BYTE    0x01
#define TYPE_SHORT   0x02
#define TYPE_INT     0x03
#define TYPE_LONG    0x04
#define TYPE_FLOAT   0x05
#define TYPE_DOUBLE  0x06

class BASIC_TYPE
{
    private:
        int8_t  type;
        int8_t  byteValue;
        int16_t shortValue;
        int32_t intValue;
        int64_t longValue;
        float   floatValue;
        double  doubleValue;

    public:
        BASIC_TYPE();
        template<typename T> BASIC_TYPE(int8_t, T);

        template<typename T> void set(T);
        template<typename T> T    get();
};

BASIC_TYPE::BASIC_TYPE()
{
    type = TYPE_INVALID;
}

template<typename T> BASIC_TYPE::BASIC_TYPE(int8_t newType, T value)
{
    type = newType;
    set(value);
}

template<typename T> void BASIC_TYPE::set(T value)
{
    switch(type) …
Run Code Online (Sandbox Code Playgroud)

c++

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

在重载时为什么不考虑函数的返回类型?

可能重复:
返回类型的函数重载?

嗨,

在重载时我们说参数列表必须按数字或类型不同,但在返回类型上无关紧要,为什么这样呢?

功能

//Function 1
int Add(int a, int b)
{return a+b;}

//Function 2
Double Add(Double a, Double b)
{return a+b;}

//Function 3
Double Add(int a, int b)
{return (Double)a+b;}
Run Code Online (Sandbox Code Playgroud)

函数1 2是重载的,其中函数1和3不是??? 原因???

任何帮助都非常感谢.

.net c# c++ oop

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

功能重载

在C++中,为什么函数重载没有在返回类型的基础上实现?

c++

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

在返回类型上重载operator []

从某种程度上说,有些事情让我的大脑感到不安:我试图根据返回类型重载[]运算符.这是我需要做的:

class A {

private:
    double* data_;
    int N_;
public:
    A (N=0):N_(N){
        data_ = new double[N];
    }
    ~A {delete[] data_;}

    double operator[] (const int i) {
        return data_[i];
    }

    double* operator[] (const int i) {
        return &data[i]; // for example; in fact here i need to return some block of data_ 
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码不会编译; 那是我的问题.有人可以帮我解决这个问题吗?

PS:我知道如何在返回类型上重载正常函数,例如:

int foo ();
string foo ();
Run Code Online (Sandbox Code Playgroud)

我使用了一些我在这个论坛中读到的技巧.通过这种方式:

struct func {
    operator string() { return "1";}
    operator int() { return 2; }
};

int main( …
Run Code Online (Sandbox Code Playgroud)

c++

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

定义具有相同名称但返回类型不同的两个方法是否合法?

我写了一段代码来确定一个典型的回文字符串.我通过返回字符串的reverse()方法的定义来做到这一点.我也渴望拥有相同的方法,但是在虚空形式中,因为未来的某些需求.当我将后者添加到代码中时,有效输出将变为无效.所以,问题是定义两个具有相同名称但返回类型不同的方法是否合法?如果没有,请让我知道如何使用void-type方法编写此代码.

class detector(object):
    def __init__(self,string):
        self.string = string

    forbidden = (' ','!','?','.','-','_','&','%',"#",",")

    def eliminator(self):
        for item in self.forbidden:
            if item in self.string:
                self.string = self.string.replace(item,"")

    def reverse(self):
        return self.string[::-1]            

    #def reverse(self):
    #    self.string = self.string[::-1]    I am prone to add this method

    def check(self):
        reversed = self.reverse()
        if self.string == reversed:
            print("Yes")
        else:
            print("No")

det = detector("rise to vote, sir!")
det.eliminator()
det.check()
Run Code Online (Sandbox Code Playgroud)

当我添加注释行时,有效的"是"变为"否"!

python

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

如果返回类型不同..那么它将超载或过度骑行

public int Add(int a, int b) 
public float Add(int a, int b) 
Run Code Online (Sandbox Code Playgroud)

返回类型不同.

这是超载还是超载?

如果访问类型不同,该怎么办?

public int Add(int a, int b) 
private int Add(int a, int b)
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?

c# oop

0
推荐指数
1
解决办法
206
查看次数

标签 统计

c++ ×6

c# ×4

.net ×2

method-signature ×2

oop ×2

overloading ×2

interface ×1

java ×1

python ×1

templates ×1