友元函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 23:46:18
设计一个程序,其中有3个类,即CBank,BBank和GBank,分别为中国银行类
、工商银行类和农业银行类。每个类都包含一个私有数据balance,用于存放储户在该行的存款数,
另有一个友元函数total用于计算储户在这3家银行中的总存款数
#include <iostream>

class BBank;
class GBank;
class CBank
{public:
CBank(float b){balance=b;}
CBank(CBank &C){balance=C.balance;}
float disp(){return balance;}
friend float total(CBank &c,BBank &b,GBank &g);

private:

float balance;

};

class BBank
{public:
float disp(){return balance;}
BBank(float b){balance=b;}

BBank(BBank &b){balance=b.balance;}
friend float total(CBank &c,BBank &b,GBank &g);

private:

float balance;

};

class GBank
{public:
GBank(float b){balance=b;}
GBank(GBank &b){balance=b.balance;}
float disp(){return balance;}
friend float total(CBank &c,BBank &b,GBank &g);
private:

float balance;

};

float

使用引用调用,可以避免传递函数实参时候要调用的复制构造函数。
也就是
float total(CBank &c,BBank &b,GBank &g)
{
return (c.balance+b.balance+g.balance);
}
void main()
{ using namespace std;
CBank c(1);BBank b(2);GBank g(3);
cout<<total(c,b,g)<<endl;
}

这样写,传递实参c,b,g的时候,不会调用类CBank,BBank,GBank的复制构造函数,也就是
CBank(CBank &C){balance=C.balance;}
BBank(BBank &b){balance=b.balance;}
GBank(GBank &b){balance=b.balance;}
,这样运行时间会比
float total(CBank c,BBank b,GBank g)
{
return (c.balance+b.balance+g.balance);
}
这样写快些,当然你如果不引用调用也是可以的。就是传递实参的时候,要调用相应类的复制构造函数。