博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

帅得不敢出门

热爱c++ 博客文章多为转载(帖子后面有带原文链接的)以做收藏 若有误处 望多多赐教
   stupidpig.cublog.cn
关于作者  
姓名:帅得不敢出门
职业:学生
年龄:22
位置:福州
C++高手群:3503799
个性介绍:新博客路过也帮推荐下谢谢

我的分类  




运算符重载friend与非friend的问题

#include <iostream>
using namespace std;
class complex{
    private:
        int real,imag;
    public:
        complex(int r=0,int i=0):real(r),imag(i){}
        friend complex operator +(complex c1);
        friend complex operator -(complex c1);
        void diplay();
};
void complex::diplay(){cout < <"real:" < <real < <"imag:" < <imag < <endl;}

complex operator +(complex c1){
    return complex(real+c1.real, imag+c1.imag);
}
complex operator -(complex c1){
    return complex(real-c1.real,imag-c1.imag);
}
int main(){
    complex c1(1,2),c2(2,3),c3;
    c1.diplay();
    c2.diplay();
    c3=c1+c2;
    c3.diplay();
    c3=c1-c2;
    c3.diplay();
}
//此处不能通过,没想通,面下面这个就可以运行,不知为什么?
#include <iostream>
using namespace std;
class complex{
    private:
        int real,imag;
    public:
        complex(int r,int i);
        void display();
        friend complex operator +(complex c1,complex c2);
        friend complex operator -(complex c1,complex c2);
};
complex::complex(int r,int i){
    real=r;
    imag=i;
}
complex complex::operator +(complex c1,complex c2){
    return complex(c1.real+c2.real,c1.imag+c2.imag);
}
complex complex::operator -(complex c1,complex c2){
    return complex(c1.real-c2.real,c1.imag-c2.imag);
}
void complex::display(){
    cout < <"real=" < <real < <"imag=" < <imag < <endl;
}
int main(){

}

因为如果是friend的话 参数必须显示有两个操作对象
而非friend的  因为其本身隐含了一个this参数 所以不要两个 

所以你第一个可行 第二个不行  把friend去掉就可以了

 

class complex{
    private:
        int real,imag;
    public:
        complex(int r=0,int i=0):real(r),imag(i){}
         complex operator +( complex c1);
          complex operator -( complex c1);
        void diplay();
};
void complex::diplay(){cout <<"real:" <<real <<"imag:" <<imag <<endl;}

complex complex::operator +(complex c1){
    return complex(real+c1.real, imag+c1.imag);
}
complex complex::operator -( complex c1){
    return complex(real-c1.real,imag-c1.imag);
}
int main(){
    complex c1(1,2),c2(2,3),c3;
    c1.diplay();
    c2.diplay();
    c3=c1+c2;
    c3.diplay();
    c3=c1-c2;
    c3.diplay();
}

输出如下
real:1imag:2
real:2imag:
3
real:3imag:
5
real:
-1imag:-1
Press any key to
continue

 原文地址 http://topic.csdn.net/u/20080515/17/934eb291-dc64-467b-b3b0-f9c11fbd12cc.html?seed=655092630
 发表于: 2008-05-15,修改于: 2008-05-15 18:33 已浏览127次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.20389

京ICP证041476号