为了账号安全,请及时绑定邮箱和手机立即绑定

按返回类型过载

按返回类型过载

C++
慕标5832272 2019-07-11 09:25:22
按返回类型过载我在这里读到了几个关于这个话题的问题,但这似乎让我感到困惑。我刚刚开始学习C+,我还没有学习模板或操作符重载等等。现在有一个简单的方法来超载吗?class My {public:     int get(int);     char get(int);}没有模板或奇怪的行为?还是我应该class My {public:     int get_int(int);     char get_char(int);}?
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

不,没有。不能基于返回类型重载方法。

重载解析考虑到功能签名..函数签名由以下内容组成:

  • 函数名
  • 简历-修饰符
  • 参数类型

以下是这段话:

1.3.11签字

参与过载解析(13.3)的函数的信息:它的参数类型列表(8.3.5),如果函数是类成员,则函数本身和声明成员函数的类的cv-限定符(如果有的话)。[.]

备选方案:

1)更改方法名称:

class My {public:
    int getInt(int);
    char getChar(int);};

2)OUT参数:

class My {public:
    void get(int, int&);
    void get(int, char&);}

3)模板.。在这个案子里杀得过火了。


查看完整回答
反对 回复 2019-07-11
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这是可能的,但我不确定这是否是我推荐给初学者的技术。与其他情况一样,当您希望函数的选择取决于如何使用返回值时,可以使用代理;首先定义如下getChargetInt,然后是一个通用的get()它返回这样的代理:

class Proxy{
    My const* myOwner;public:
    Proxy( My const* owner ) : myOwner( owner ) {}
    operator int() const
    {
        return myOwner->getInt();
    }
    operator char() const
    {
        return myOwner->getChar();
    }};

根据需要将其扩展到多种类型。


查看完整回答
反对 回复 2019-07-11
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

不,不能按返回类型过载;只能按参数类型和Const/Volative限定符过载。

另一种选择是使用引用参数“返回”:

void get(int, int&);void get(int, char&);

尽管我可能会使用一个模板,或者像第二个例子那样使用不同名称的函数。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 434 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信