Friend Class of child尝试访问Parent的受保护功能

时间:2018-06-12 05:58:15

标签: c++ visual-studio inheritance gcc friend

我有一个班级和一个孩子班级。 Parent有一个名为 setId(int id)的受保护函数。现在我想让孩子的朋友类(可以称之为朋友)使得setId功能可以访问。这是可能的还是我必须重新实现Child类中的setId函数并使用parent的受保护的setId函数?

我已经尝试使用VS-Compiler,但它确实有效。

我使用gcc并得到"错误:'void Parent :: setId(int)'受到保护"

班级家长

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(){}
};

班级朋友

#include "Child.h"

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

1 个答案:

答案 0 :(得分:1)

普遍的看法认为正确的方法是升级Child中的访问权限:

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

通常的理由是,这是简短的,并且在没有发布任何其他内部信息的情况下,清楚准确地表达了什么是公开的。