用C++中的friend访问private数据

-- TOC --

C++对象中存在private数据,对象之外的函数是无法访问的,但是friend可以,俗称友元。友元可以是全局函数接口,某一个class,或者某个class中的成员函数。

测试代码如下:

#include <iostream>
#include <string>
using namespace std;


class car;
struct rich {
    void show_car(car& a);
};

class car {
    friend void show_car(car&);
    friend struct xyz;
    friend void rich::show_car(car&);

    int speed;
    string vendor;

public:
    car(int sp, string vd):
        speed{sp},
        vendor{vd} {
    }
};

void show_car(car& a) {
    cout << a.vendor << " " << a.speed << endl;
}

struct xyz {
    void show_car(car& a) {
        cout << a.vendor << " " << a.speed << endl;
    }
};

void rich::show_car(car& a) {
    cout << a.vendor << " " << a.speed << endl;
}


int main(void) {
    car tesla{100, "telsa"};
    show_car(tesla);

    xyz z;
    z.show_car(tesla);

    rich me;
    me.show_car(tesla);

    return 0;
}

代码编译运行OK。

class中的成员默认都是private,与struct正好相反。(理解C++的public,protected和private

本文链接:https://cs.pynote.net/sf/c/cpp/202209291/

-- EOF --

-- MORE --