| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1285 人关注过本帖
标题:【求助】C++重载小问题
只看楼主 加入收藏
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
【求助】C++重载小问题
#include <iostream>
using namespace std;

int add(int *p1,int *p2)
{      
    int i;
    for(i=0;i<5;i++)
    cout<<"int ,int )";
    return  *(p1+i)+*(p2+i);
}
char add(char *p1,char *p2)
{    int i;
    for(i=0;i<5;i++)
    cout<<"(char ,char)";
    return  *(p1+i)+*(p2+i);
}
void main()
{
    int a[5]={1,2,3,4,5};
    int  b[5]={5,4,3,2,1};
    int c;
            c=add(a,b);
            cout<<c<<endl;
}没错误,就是结果不对哪位大师帮忙改下
谢谢啦


[ 本帖最后由 Angel乖乖 于 2011-9-22 23:30 编辑 ]
搜索更多相关主题的帖子: void include Angel return void include Angel return 
2011-09-22 23:24
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
,啊啊啊啊,谁帮忙改下
谢谢啦
2011-09-22 23:31
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
who can help me?????
2011-09-22 23:33
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:7 
美女我来了
程序代码:
#include <iostream>
using namespace std;

int add(int *p1,int *p2)
{     
    int i;
    for(i=0;i<5;i++)
    {
    cout<<"int ,int )";
    }
     return  (*p1+i)+(*p2+i);  //*p1是代表p1本身的数值,而传递近来的p1是个数组那么*p1代表着p[0]中的元素的数据,而*(p1+i)就是将p1的地址加i了,所以会出错,重载是没有问题的
   //return (p1[0]+i)+(p2[0]+i);//和上面一样可以说是上面的原形
}
char add(char *p1,char *p2)
{    int i;
    for(i=0;i<5;i++)
    cout<<"(char ,char)";
    return  *(p1+i)+*(p2+i);//这个是错误的
}
void main()
{
    int a[5]={1,2,3,4,5};
    int  b[5]={5,4,3,2,1};
    int c;
            c=add(a,b);
            cout<<c<<endl;
           
} 


都不结贴我郁闷那!
2011-09-22 23:41
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
回复 4楼 xg5699
怎么改呢?
2011-09-22 23:46
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
谢谢你啊。。。。
2011-09-22 23:47
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
回复 4楼 xg5699
还有,我把MS2005下了,可是不会用呀,不知道哪里出错了
2011-09-22 23:51
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:0 
回复 7楼 Angel乖乖
int add函数里面的返回值我已经帮你改好了,因为你的程序中重载的是int类型的参数所以不会运行下面一个char类型的add函数
所以直接运行就可以了.char你自己改 如果不会改证明你还没有理解,慢慢来
ms是什么东西?是VS吧?下好了安装呀,

[ 本帖最后由 xg5699 于 2011-9-23 00:06 编辑 ]

都不结贴我郁闷那!
2011-09-22 23:58
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:7 
以下是引用xg5699在2011-9-22 23:41:34的发言:

美女我来了#include <iostream>
using namespace std;

int add(int *p1,int *p2)
{     
    int i;
    for(i=0;i<5;i++)
    {
    cout<<"int ,int )";
    }
     return  (*p1+i)+(*p2+i);  //*p1是代表p1本身的数值,而传递近来的p1是个数组那么*p1代表着p[0]中的元素的数据,而*(p1+i)就是将p1的地址加i了,所以会出错,重载是没有问题的
   //return (p1[0]+i)+(p2[0]+i);//和上面一样可以说是上面的原形
}
char add(char *p1,char *p2)
{    int i;
    for(i=0;i<5;i++)
    cout<<"(char ,char)";
    return  *(p1+i)+*(p2+i);//这个是错误的
}
void main()
{
    int a[5]={1,2,3,4,5};
    int  b[5]={5,4,3,2,1};
    int c;
            c=add(a,b);
            cout<<c<<endl;
           
}

 “return  (*p1+i)+(*p2+i);  //*p1是代表p1本身的数值,而传递近来的p1是个数组那么*p1代表着p[0]中的元素的数据,而*(p1+i)就是将p1的地址加i了,所以会出错,重载是没有问题的”说明这位仁兄根本不懂指针运算,地址加1是指向数组下一个元素!
找你这样改只不过恰好是用5+(i=4)来得到结果而已,如果要得到a的数组最后一位与b的数组最后一位相加,完整程序如下:
程序代码:
#include <iostream>
using namespace std;
int add(int *p1,int *p2)
{
    int i,j;
    for(i=0;i<sizeof(p1);i++) ;
    for(j=0;j<sizeof(p2);j++) ;
    cout<<"(int,int):";
    return  *(p1+i)+*(p2+j);
}
char add(char *p1,char *p2)
{
    int i,j;
    for(i=0;i<sizeof(p1);i++) ;
    for(j=0;j<sizeof(p2);j++) ;
    cout<<"(char ,char):";
    return  *(p1+i)+*(p2+j);
}
int main()
{
    int a[5]={1,2,3,4,5};
    int b[5]={5,4,3,2,1};
    int c;
    c=add(a,b);
    cout<<c<<"  "<<endl;
    return 0;
}
2011-09-23 09:17
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:0 
回复 9楼 lucky563591
我想请问这位高人,我有说错吗?
而*(p1+i)就是将p1的地址加i了,所以会出错
我问你如果不是地址相加p1的地址发生变化你是如何指向下一个数组元素?!我只不过没有打p1+1是指向下一个数组元素的文字而已,
其实就是实际的地址+1,只不过每一个元素占4个字,所以内部运行加1就是将地址加4个字节,以使它指向下一个元素。说明p1的地址加了1后让它指向下一个元素的.
也就是说p1+i就是将p1的地址加i了
循环下来i的值变成了5,而数组a[5]元素只有0-4.那当然要出错了!我后面特意还加了"所以会出错" 指的就是这个意思
我是没有理解她程序中的意思,原来是数组最后一个元素相加我误认为了都第一个元素加上5之后的总和
你看看你自己编的程序,还好意思说别人.相同数组元素最后2个元素相加你居然还重新建个j,加2个你要重新建个变量,那我加30个你是不是要英文
 字母abcdefg都建啊,建的子孙满堂海枯石烂那?哦对了,你是高手啊,我怎么把这点忘了,高手怎么会那么笨去建那么多变量呢,
到时候肯定又用数组建啦
程序代码:
#include <iostream>
using namespace std;
int add(int *p1,int *p2)
{     
    int i;
    for(i=0;i<4;i++);   //直接用MM的程序秒杀你下面char的程序
    cout<<"int ,int )";
    return  *(p1+i)+*(p2+i);
}

char add(char *p1,char *p2)
{
    int i,j;
    for(i=0;i<sizeof(p1);i++) ;
    for(j=0;j<sizeof(p2);j++) ;
    cout<<"(char ,char):";
    return  *(p1+i)+*(p2+j);
}
int main()
{
    int a[5]={1,2,3,4,5};
    int b[5]={5,4,3,2,1};
    int c;
    c=add(a,b);
    cout<<c<<"  "<<endl;
    return 0;
}




[ 本帖最后由 xg5699 于 2011-9-23 14:11 编辑 ]

都不结贴我郁闷那!
2011-09-23 10:12
快速回复:【求助】C++重载小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095313 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved