是调用哪个重载函数?#includeiostreamusing namespace std#includecstringstruct stringy{char *str
是调用哪个重载函数?
#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);