C++:传递给非好友的友元函数

标签 c++ encapsulation friend access-control

<分区>

这不会破坏封装吗?

B.h:

class B{
    int x, y;
public:
    B() : x(1), y(1) {}
    B(const B& obj) : x(obj.x), y(obj.y) {}

    int getx();
    int gety();

    friend void pass_private_members(B&);
};

B.cpp

void non_friend_pass_private_members(int& x);

int B::getx(){
    return this->x;
}

int B::gety(){
    return this->y;
}

void pass_private_members(B& obj){
    non_friend_pass_private_members(obj.x);
}

void non_friend_pass_private_members(int& x){
    x++;
}

主要.cpp

int main(){
    B obj;
    pass_private_members(obj);
    cout << obj.getx() << endl;
    return 0;
}

最佳答案

通过声明 friend void pass_private_members(B&),您告诉编译器您信任 pass_private_members 来处理 B 的私有(private)成员。它对私有(private)成员的作用与编译器无关。这与调用 non_friend_pass_private_members 的成员函数没有什么不同。

关于C++:传递给非好友的友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15607609/

相关文章:

c++ - QNX - 崩溃时未生成核心转储

c++ - 在运行时更改纹理参数

c++ - 随机数生成和封装

c++ - C++模板类中使用友元函数操作私有(private)变量时出错

c++ - 访问类中定义的友元函数

c++ - 在模板类中声明的 friend 模板函数导致 undefined symbol 链接错误

c++ - 访问冲突读取位置 0xcdcdcdcd。 C++

c++ - GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?

javascript - JavaScript 框架中的 Widget 封装

C#:封装例如集合