child 的朋友 Class 尝试访问 Parent 的受保护功能
Friend Class of child try to access protected function of Parent
我有一个ParentClass和一个ChildClass. Parent 有一个名为 setId(int id) 的受保护函数。现在我想让 Child 的朋友 class 可以访问 setId 函数(我们称它为 Friend)。这是可能的还是我必须在 Child class 中重新实现 setId 函数并使用 parent?
的受保护 setId 函数
我已经用 VS-Compiler 试过了,效果很好。
我使用 gcc 得到 "error: ‘void Parent::setId(int)’ is protected"
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);
}
};
常识认为正确的方法是升级 Child 的访问权限:
class Child: public Parent {
public:
void setId(int id) override { Parent::setId(id); } // public for Friend
};
通常的理由是,这很简短,清楚准确地表达了正在制作的内容 public,没有发布任何其他内部信息。
我有一个ParentClass和一个ChildClass. Parent 有一个名为 setId(int id) 的受保护函数。现在我想让 Child 的朋友 class 可以访问 setId 函数(我们称它为 Friend)。这是可能的还是我必须在 Child class 中重新实现 setId 函数并使用 parent?
的受保护 setId 函数我已经用 VS-Compiler 试过了,效果很好。
我使用 gcc 得到 "error: ‘void Parent::setId(int)’ is protected"
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);
}
};
常识认为正确的方法是升级 Child 的访问权限:
class Child: public Parent {
public:
void setId(int id) override { Parent::setId(id); } // public for Friend
};
通常的理由是,这很简短,清楚准确地表达了正在制作的内容 public,没有发布任何其他内部信息。