朋友功能和继承在CPP中

Friend function and Inheritance in cpp

本文关键字:CPP 继承 功能 朋友      更新时间:2023-10-16

AM新建的CPP。通常,朋友函数可以访问班级的私人和受保护的成员,但是当我尝试在派生的类中使用朋友函数时,请观察魏德行为。

class first
{
  int a;
};
class second : public first
{
  public:
   friend void hai ( second );
};
void hai ( second s )
{
 printf("%d",s.a); // It says compilation error 
}
void main()
{
  second s;
  hai(s);
}

如果我做 a to public ,它可以正常工作。

有人可以清理我,如果在基本私有范围中,我为什么不访问它。

问候prasath s。

使场a受保护,而不是私有。

只能从宣布的类中访问私有字段。

您的错误在这里:

class first
{
  int a;
};

类成员的默认值是私人的,因此您无法从派生类访问它。

私人成员只能从同一类访问。线

class second : public first

不会将私人成员更改为公共,因此您可以选择a受保护/公开,或者在first中包括公共/受保护的GET/SET功能,该功能将管理a的访问。

如果在基本的私有范围中,我为什么不访问它。

friend功能可以访问其朋友的类private成员。

但是,在这种情况下,基类中的成员a默认为 private,因此不继承给儿童类。

公共继承需要protected或基类的成员由子类继承。因此,要为您的示例工作,您可以使用protected成员a

class first
{
    protected:
        int a;
};

first::aclass first中的 private

class second是从class first公开派生的,因此:

  • class first的所有公共成员均在class second中公开,可以通过class second的对象访问。
  • class first的所有受保护成员均受到class second的保护,无法通过class second的对象访问。
  • class first的所有私人成员在class second中都无法访问,无法通过class second的对象访问。

因此,您无法通过class second的对象访问first::a

有关更多信息:朋友类对象访问式base类可以在派生类对象上私人成员?

为什么派生的类可以通过指向基础的指针访问其基类的受保护成员?