【问题标题】:Friend Class of child try to access protected function of Parent孩子的朋友类尝试访问父母的受保护功能
【发布时间】:2018-11-21 10:26:14
【问题描述】:

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

我已经用 VS-Compiler 试过了,它可以工作。

我使用 gcc 并得到“错误:'void Parent::setId(int)' is protected”

班级家长

class Parent
{
public:
    Parent(){}

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

    int m_id;
};

班级孩子

#include "Parent.h"

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

班友

#include "Child.h"

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

【问题讨论】:

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


【解决方案1】:

常识认为,正确的方法是在 Child 中升级访问权限:

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

通常的理由是,这很简短,清楚而准确地表达了公开的内容,而不发布任何其他内部信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多