按返回类型过载

按返回类型过载

我在这里读到了几个关于这个话题的问题,但这似乎让我感到困惑。我刚刚开始学习C+,我还没有学习模板或操作符重载等等。

现在有一个简单的方法来超载吗?

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

没有模板或奇怪的行为?还是我应该

class My {public:
    int get_int(int);
    char get_char(int);}

?


慕标5832272
浏览 435回答 3
3回答

白猪掌柜的

不,没有。不能基于返回类型重载方法。重载解析考虑到功能签名..函数签名由以下内容组成:函数名简历-修饰符参数类型以下是这段话: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)模板.。在这个案子里杀得过火了。

神不在的星期二

这是可能的,但我不确定这是否是我推荐给初学者的技术。与其他情况一样,当您希望函数的选择取决于如何使用返回值时,可以使用代理;首先定义如下getChar和getInt,然后是一个通用的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();     }};根据需要将其扩展到多种类型。

泛舟湖上清波郎朗

不,不能按返回类型过载;只能按参数类型和Const/Volative限定符过载。另一种选择是使用引用参数“返回”:void get(int, int&);void get(int, char&);尽管我可能会使用一个模板,或者像第二个例子那样使用不同名称的函数。
打开App,查看更多内容
随时随地看视频慕课网APP