为什么在使用C ++朋友函数时出现错误?

时间:2018-10-04 15:20:24

标签: c++

尽管试图将display()定义为朋友函数,但我仍尝试在C ++中学习朋友函数,但无法访问变量a和b。这就是为什么编译器显示错误。

original code

2 个答案:

答案 0 :(得分:2)

display应该显示给谁?成为朋友只是意味着,如果您遇到该类的对象,则可以访问其所有内部对象。您可能想要:

void display(const Add &a) {
    cout << a.a + a.b;
}

然后您可以使用以下命令在main中调用它:

display(A);

(请记住,您也需要在类中更改display的定义!)

答案 1 :(得分:1)

为了更好的解释,friend函数用于从外部访问该类的私有或受保护的属性(没有适当的访问器,该属性不能到达)。可以在

找到更好的解释性答案

Example taken from programiz:

#include <iostream>
using namespace std;

// forward declaration
class B;
class A {
    private:
      int numA;
    public:
      A(): numA(12) { }
      // friend function declaration
      friend int add(A, B);
};

class B {
    private:
       int numB;
    public:
       B(): numB(1) { }
       // friend function declaration
       friend int add(A , B);
};

// Function add() is the friend function of classes A and B
// that accesses the member variables numA and numB
int add(A objectA, B objectB)
{
   return (objectA.numA + objectB.numB);
}

int main()
{
    A objectA;
    B objectB;
    cout<<"Sum: "<< add(objectA, objectB);
    return 0;
}
在通常情况下,在类之外添加功能的

不应达到numA或numB属性,因为它们是私有的,但由于被声明为friend,因此不会出错。因此,对于您的问题,您应该这样做:

#include<iostream>
using namespace std;
    class Add {
        private:
            int a, b; 
            /*Declared as private to show the significance of friend otherwise
             *it does not make sense*/
        public:
            void get_data();
            friend void display(Add);
    }

    //And change the display function
    void display(Add obj) {
        cout << (obj.a + obj.b);
    }