c 语言友元函数重载,实验九  友元与运算符重载

13th

November,2013

1、 定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。

•分别用成员函数与友元函数编写运算符重载函数;

•在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。

运用成员函数如下:

#include

#include

using namespace std;

class complex

{public:

complex(double r=0,double i=0){real=r;imag=i;}

complex operator -=(complex&);

void display(string);

private:

double real,imag;

};

complex complex::operator -=(complex &c)

{

return complex(real-c.real,imag-c.imag);}

void complex ::display(string str)

{

cout<

int main()

{

complex c1(10,20),c2(15,30);

cout<

c1.display("c1");

c2.display("c2");

c2=c2.operator -=(c1);

cout<

c1.display("c1");

c2.display("c2");

return 0;

}

a4c26d1e5885305701be709a3d33442f.png

运用友元函数如下:

#include

#include

using namespace std;

class complex

{public:

complex(double r=0,double i=0){real=r;imag=i;}

friend complex operator -=(complex &a,complex &b);

void display(string);

private:

double real,imag;

};

complex operator -=(complex &a,complex &b)

{

return complex(b.real-a.real,b.imag-a.imag);}

void complex ::display(string str)

{

cout<

int main()

{

complex c1(10,20),c2(15,30);

cout<

c1.display("c1");

c2.display("c2");

c2=operator -=(c1,c2);

cout<

c1.display("c1");

c2.display("c2");

return 0;

}

a4c26d1e5885305701be709a3d33442f.png

:需要注意 有一点比较特殊就是友元函数使用时在类外定义时不需要在加上类名 但不知为何直接使用c1-=c1就是没成功 后用了另一种调用方式

2、 定义一个数组类Array:

•其私有数据成员为整型一维数组a[10];

•通过构造函数给数组赋初值;

•用show函数显示数组的元素值;

•用成员函数重载运算符“+”,直接实现两个一维数组对应元素相加的运算。•在主函数中定义数组a、b分别为:

int a[10]={1,2,3,4,5,6,7,8,9,10};int b[10]={4,5,6,7,8,9,10,11,12,13};

•用Array定义三个数组对象arr1(a)、arr2(b)、arr3,执行arr3=arr1+arr2运算,输出arr3的数组元素值。

#include

using namespace std;

class Array

{public:

Array(){

int i;

for(i=0;i<10;i++) a[i]=0;

}

Array(int m[10]){

int i;

for(i=0;i<10;i++) a[i]=m[i];

}

void show(){

int i;

for(i=0;i<10;i++) cout<

cout<

}

Array operator +(Array &b);

private:

int a[10];

};

Array Array::operator +(Array &b)

{

int i,c[10];

for(i=0;i<10;i++) c[i]=b.a[i]+a[i];

return c;

}

int main()

{

int a[10]={1,2,3,4,5,6,7,8,9,10},b[10]={4,5,6,7,8,9,10,11,12,13};

Array arr1(a),arr2(b),arr3;

arr3=arr1.operator +(arr2);

cout<

arr1.show();

cout<

arr2.show();

cout<

arr3.show();

return 0;

}

a4c26d1e5885305701be709a3d33442f.png

•类似地,用友元函数重载运算符“+=”,实现复合赋值运算:arr1+=arr2,并输出arr1的元素值。

#include

using namespace std;

class Array

{public:

Array(){

int i;

for(i=0;i<10;i++) a[i]=0;

}

Array(int m[10]){

int i;

for(i=0;i<10;i++) a[i]=m[i];

}

void show(){

int i;

for(i=0;i<10;i++) cout<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值