Друг Класс ребенка пытается получить доступ к защищенной функции Родителя - PullRequest
0 голосов
/ 12 июня 2018

У меня есть Родительский Класс и Детский Класс.Родитель имеет защищенную функцию с именем setId (int id) .Теперь я хочу сделать функцию setId доступной для класса друга Child (назовем его Friend ).Возможно ли это, или мне нужно переопределить функцию setId внутри класса Child и использовать защищенную функцию setId родительского?

Я пробовал это с VS-Compiler, и это работает.

Я использую gcc и получаю «error: 'void Parent :: setId (int)' защищен»

Class Parent

class Parent
{
public:
    Parent(){}

protected:
    void setId(int id){m_id=i}

    int m_id;
};

Class Child

#include "Parent.h"

class Child
        : public Parent
{
    friend class FriendClass;
public:
    Child(){}
};

ClassДруг

#include "Child.h"

class FriendClass
{
public:
    FriendClass(){
      Child c;
      c.setId(1);
    }
};

1 Ответ

0 голосов
/ 12 июня 2018

Согласно общепринятому мнению, правильным способом является улучшение доступа в Child:

class Child: public Parent {
public:
    void setId(int id) override { Parent::setId(id); } // public for Friend
};

Обычное обоснование заключается в том, что это краткое и четко и точно выражает то, что публикуется, без публикации каких-либо других внутренних документов.

...