读书人

是调用哪个满载函数

发布时间: 2013-04-09 16:45:09 作者: rapoo

是调用哪个重载函数?

#include<iostream>
using namespace std;
#include<cstring>
struct stringy
{
char *str;
int ct;
};

void set(stringy & bny, const char * str);
void show(const char *str, int cnt = 1);
void show(const stringy & bny, int cnt = 1);

int main()
{
stringy beany;
char testing[]="Reality isn't what it used to be.";
set(beany,testing);
show(beany);
show(beany,2);
testing[0]='D';
testing[1]='u';
show(testing);
show(testing,3);
show("Done!");
return 0;
}

void set(stringy &bny, const char *str)
{
bny.ct=strlen(str);
bny.str=new char[bny.ct+1];
strcpy(bny.str,str);
}

void show(const char *str,int cnt)
{
while(cnt-->0)
{
cout<<str<<endl;
}
}

void show(const stringy &bny,int cnt)
{
while(cnt-->0)
{
cout <<bny.str<< endl;
}
}


这是c++ primer plus后面的一道编程练习的习题,但是我不知道show(beany);和show(beany,2);调用哪个重载函数?同样show(testing);show(testing,3);这个我也不懂!请各位懂的朋友帮我解决,谢谢! c++ 编程 重载函数
[解决办法]
最近也才看到函数重载,根据类型匹配原则,show(beany),形参是结构体,所以调用的是void show(const stringy & bny, int cnt = 1),其中的cnt默认为1,所以输出一次。show(beany,2),形参也是结构体,所以调用的也是void show(const stringy & bny, int cnt = 1),但这里实参为2,所以输出2次。show(testing),形参为字符串,cnt默认参数为1,输出一次。show(testing,3),形参为字符串,cnt的值为3,所以字符串输出3次。
呵呵,不知道这样解释对不对
[解决办法]
引用:
最近也才看到函数重载,根据类型匹配原则,show(beany),形参是结构体,所以调用的是void show(const stringy & bny, int cnt = 1),其中的cnt默认为1,所以输出一次。show(beany,2),形参也是结构体,所以调用的也是void show(const stringy & bny, int cnt = 1),但这里实参为2,所以输出……

个人觉得正解。很纳闷楼主对此有什么犹豫的?这两个函数的第一个参数的类型完全不同,一个是字符串一个是结构体,只要根据参数的不同就可以看出调用哪个函数的了。
[解决办法]
beany是string类型的
都是调用的 void show(const stringy & bny, int cnt = 1);


testing是char 数组,testing是数组首地址,因此,
show(testing);show(testing,3);
调用的是void show(const char *str, int cnt = 1);

读书人网 >C++

热点推荐