C++学习笔记10:友元

1 友元函数

    (1)友元函数:一个类的友元函数可以访问该类的私有成员。
    (2)eg:(见friends.cpp)
// 友元函数例子
// 友元函数:一个类的友元函数可以访问该类的私有成员

#include <iostream>

using namespace std;

class CCar; // 提前声明CCar类,以便后面的CDriver类使用

class  CDriver
{
public:
    void ModifyCar(CCar* pCar); // 改装汽车  CCar的指针,如果不是指针,而是CCar的对象,则CCar在前面需要声明完整。
};

class CCar{
private:
    int price;  // 私有成员变量
    friend int MostExpensiveCar(CCar cars[], int total);    // 声明友元  找出最贵的那辆车
    friend void CDriver::ModifyCar(CCar *pCar); // 声明友元  将CDriver::ModifyCar函数声明为CCar的友元
};

void CDriver::ModifyCar(CCar *pCar) {
    // price 在CCar类中是私有成员,而在CDriver::ModifyCar()函数中却直接进行了访问,原因是CDriver::ModifyCar()这个成员函数是CCar这个类的朋友,友元。
    pCar->price += 1000;    // 汽车改装后价值增加
}

// 求最贵的汽车的价格  全局的普通的函数
int MostExpensiveCar(CCar cars[], int total)
{
    int tmpMax = -1;
    for(int i = 0; i < total; ++i)
        // cars[i].price可直接访问的原因,是由于MostExpensiveCar是CCar的朋友,即友元。
        if(cars[i].price > tmpMax)
            tmpMax = cars[i].price;
    return tmpMax;
}

int main()
{
    return 0;
}


    (3)可以将一个类的成员函数(包括构造、析构函数)说明为另一个类的友元。
        eg:
        class B{
            public:
                void function();
        };

        class A{
            private:
                int price;
            friend void B::function();  // 将B::function()函数声明为A的友元,这样在函数B::function()函数中就可以访问A中的私有变量price
        }

2 友元类

    (1)定义:如果A是B的友元类,那么A的成员函数可以访问B的私有成员。
    (2)eg:
        class CCar{
            private:
                int price;
            friend class CDriver;   // 声明CDriver为友元类
        };
        class CDriver
        {
            public:
            CCar myCar;
                void ModifyCar(){   // 改装汽车
                    myCar.price += 1000;    // 因为CDriver是CCar的友元类,故此处可以访问其私有成员
                }
        };
        int main(){ return 0; }
    (3)友元类之间的关系不能传递,不能继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值