注册 登录
编程论坛 C++教室

【求助】C++重载小问题

Angel乖乖 发布于 2011-09-22 23:24, 1285 次点击
#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 编辑 ]
11 回复
#2
Angel乖乖2011-09-22 23:31
,啊啊啊啊,谁帮忙改下
谢谢啦
#3
Angel乖乖2011-09-22 23:33
who can help me?????
#4
xg56992011-09-22 23:41
美女我来了
程序代码:
#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;
           
}

#5
Angel乖乖2011-09-22 23:46
回复 4楼 xg5699
怎么改呢?
#6
Angel乖乖2011-09-22 23:47
谢谢你啊。。。。
#7
Angel乖乖2011-09-22 23:51
回复 4楼 xg5699
还有,我把MS2005下了,可是不会用呀,不知道哪里出错了
#8
xg56992011-09-22 23:58
回复 7楼 Angel乖乖
int add函数里面的返回值我已经帮你改好了,因为你的程序中重载的是int类型的参数所以不会运行下面一个char类型的add函数
所以直接运行就可以了.char你自己改 如果不会改证明你还没有理解,慢慢来
ms是什么东西?是VS吧?下好了安装呀,

[ 本帖最后由 xg5699 于 2011-9-23 00:06 编辑 ]
#9
lucky5635912011-09-23 09:17
以下是引用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;
}
#10
xg56992011-09-23 10:12
回复 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 编辑 ]
#11
specilize2011-09-23 13:48
呵呵,大家都是来讨论的嘛,引用一句话
大家心平气和的,不要浮躁、不要气傲。建立起一个和谐的论坛。
#12
Angel乖乖2011-09-28 21:57
大家不要生气哈。。。这个程序的意思是是求a[0]+b[0],a[1]+b[1]......的和
谢谢帮助我的人
共同学习共同进步哈

1