关于C++友元类的一些见解,历程。最基本的通过友元类存取源类值,同时友元类是类组合的形式

/*
友元类 :
友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。*/

#include<iostream>
using namespace std;
class A {
    friend class B;//友元类写哪都行,public/private/函数外都可以。一般写在外/public
public:
    A(int xx) :x(xx) {};
    ~A() {};
    void display() 
    {
        cout << x << endl;
    }
    int get() { return x; }
private:
    int x;
};
//B是组合类且是A的友元类
class B {
public:
    //B(int xx):a.x(xx){};错误,这样定义构造函数与A定义的构造函数冲突二者只存其一
    B(A q) :a(q) {};//所以这里的初始化一定用组合类的方法
    ~B() {};
void set(A &a,int i);//因为类A已经是私有成员但不能想当然以为set函数可以访问A类(只是组合类)
void display(A &a);//因为B是A的友元类且A为私有成员,因此入口参数A &a可以不写
private:
    A a;
    //int d;
};
void B::set(A &a,int i)
{a.x = i;};
void B::display(A &a)
{    a.display();}
int main()
{
    A a(4),w(6);
    cout << "A类w的值为";
    w.display();
    B c(w);
    c.set(w, 4);//通过建立引用通过B类函数直接修改A类的值
    cout << "A类w的值为";
    w.display();
    cout << "B类w的值为";
    c.display(w);
    system("pause");
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值