Почему глобальная функция void showA (A & x) может получить доступ к закрытым членам класса A? - PullRequest
0 голосов
/ 30 октября 2019

Почему глобальная функция void showA (A & x) может получить доступ к закрытым членам класса A? Я знаю, что функция с похожей сигнатурой метода объявлена ​​другом класса A, но глобальная showA () отличается от функции showA (A &), объявленной внутри класса A.

#include <iostream> 

class A { 
    int a; 

public: 
    A() { a = 0; } 


    friend void showA(A&); 
}; 

void showA(A& x)  function
{ 


    std::cout << "A::a=" << x.a; 
} 

int main() 
{ 
    A a; 
    showA(a);
    return 0; 
}

1 Ответ

2 голосов
/ 30 октября 2019

Я знаю, что функция с аналогичной сигнатурой метода объявлена ​​как друг класса A

Да, функции, объявленные как друзья, могут получить доступ к закрытым членам.

но глобальная showA () не совпадает с функцией showA (A &), объявленной внутри класса A.

Неясно, как вы пришли к такому выводу. Вы объявляете, что void showA(A&) - друг, и затем вы предоставляете определение для void showA(A&). Это одна и та же функция.

PS: обратите внимание, что если бы вы определили функцию с сигнатурой showA(), как вы написали в тексте, то это действительно была бы другая функция без доступа к частнойчлены A.

...