朋友类:无法访问私人成员?

cip*_*her 0 c++ friend

我只是在学习 C++ 朋友课程。正如书上所说,朋友类也可以访问所有成员(私有和受保护的)。但就我而言,情况并非如此。

我知道有一个我看不到的愚蠢错误。请帮我找到它:D

我的代码:

#include <iostream>
using namespace std;

class A;
class B {
private:
    int num;
public:
    B(int n=0):num(n){}

    friend int add(A, B);
    friend int mul(A, B);
    friend int sub(A, B);
    void showthis(A);
    friend class A;
};

class A{
private:
    int num;
public:
    A(int n=0):num(n){}

    friend int add(A, B);
    friend int mul(A, B);
    friend int sub(A, B);   
};

int add(A a, B b){
    return a.num+b.num;
}

int sub(A a, B b){
    return a.num-b.num;
}

int mul(A a, B b){
    return a.num*b.num;
}


void B::showthis(A a){
    cout<<a.num<<endl;
}

int main(){
    A a(3);
    B b(6);
    cout<<add(a,b)<<endl;
    cout<<mul(a,b)<<endl;
    cout<<sub(a,b)<<endl;
    b.showthis(a);
}
Run Code Online (Sandbox Code Playgroud)

错误:

q17.cpp: In member function ‘void B::showthis(A)’:
q17.cpp:20:6: error: ‘int A::num’ is private
  int num;
      ^
q17.cpp:43:10: error: within this context
  cout<<a.num<<endl;
Run Code Online (Sandbox Code Playgroud)

tim*_*rau 5

你既不是B::showthis(A)也不class B是班级A的朋友。

你可以添加

friend B::showthis(A);
Run Code Online (Sandbox Code Playgroud)

或者

friend class B;
Run Code Online (Sandbox Code Playgroud)

进入A类。

  • @cipher 你宣布A班是B的朋友。正如CaptainObvlious所说,这种关系不是互惠的。这允许 A 访问 B 的私有成员,但反之亦然。 (4认同)