C++友元函数和友元类实战

一 友元函数的例子

1 代码

#include <iostream>
using namespace std;
    
class CRectangle {
    int width, height;
public:
    void set_values(int, int);
    int area(void) {return (width * height);}
    // duplicate是CRectangle的friend
    friend CRectangle duplicate(CRectangle);
};
    
void CRectangle::set_values(int a, int b) {
    width = a;
    height = b;
}
// 在duplicate函数之内,可以访问CRectangle类型的各个对象的成员width和height 
CRectangle duplicate(CRectangle rectparam) {
    CRectangle rectres;
    rectres.width = rectparam.width * 2;
    rectres.height = rectparam.height * 2;
    return (rectres);
}
    
int main() {
    CRectangle rect, rectb;
    rect.set_values(2, 3);
    rectb = duplicate(rect);
    cout << rectb.area() << endl;
}

2 运行

[root@localhost test]# g++ test.cpp -g -o test
[root@localhost test]# ./test
24

二 友员类的例子

1 代码

#include <iostream>
using namespace std;
// 声明函数原型,这是必需的,因为在CRectangle的声明中,我们引用了CSquare。
// CSquare的定义在CRectangle的后面,如果没有该声明,它在CRectangle将不可见
class CSquare;

class CRectangle {
    int width, height;
public:
    int area(void) {return (width * height);}
    void convert(CSquare a);
};
    
class CSquare {
private:
    int side;
public:
    void set_side(int a){side = a; }
    // CRectangle是CSquare的friend
    friend class CRectangle;
};
// CRectangle可以访问CSquare的protect和private成员,更具体地说
// 可以访问CSquare::side
// 友元关系并不是相互的,CSquare不能访问CRectangle中的protect和private成员
void CRectangle::convert(CSquare a) {
    width = a.side;
    height = a.side;
}
    
int main() {
    CSquare sqr;
    CRectangle rect;
    sqr.set_side(4);
    rect.convert(sqr);
    cout << rect.area()<<endl;
    return 0;
}

2 运行

[root@localhost test]# g++ test.cpp -g -o test
[root@localhost test]# ./test
16

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值