21xrx.com
2025-04-01 11:33:24 Tuesday
文章检索 我的文章 写文章
如何在C++中调用protected函数
2023-06-28 17:49:46 深夜i     --     --
C++ 调用 protected函数 访问限制 继承

在C++中,protected函数是一种特殊类型的函数,只能在类内部或派生类中访问。如果想在类外部调用protected函数,需要使用一些技巧。

一种方法是通过派生类的对象来调用protected函数,这可以通过使用友元类或成员函数来实现。例如,假设有一个父类Base和一个派生类Derived,其中Base定义了一个protected函数foo()。可以使用Derived的成员函数来调用Base的foo()函数,如下所示:

class Base{
protected:
  void foo()
    //...
  
};
class Derived: public Base{
public:
  void call_foo(){
    foo(); //调用父类的protected函数
  }
};

在上面的示例中,派生类Derived提供了一个名为call_foo()的公共成员函数,该函数调用父类Base的protected函数foo(),因此可以从类外部间接调用foo()。

另一种方法是将调用代码封装在友元函数中,以便从类外部访问protected函数。例如,假设还是有一个Base类和一个派生类Derived,并且现在需要在类外部调用Base类的foo()函数,可以定义一个名为bar()的友元函数,如下所示:

class Base{
protected:
  void foo()
    //...
  
  friend void bar(Base& b); //声明友元函数
};
void bar(Base& b){
  b.foo(); //调用父类的protected函数
}

在上例中,bar()函数被声明为Base类的友元函数,因此可以从类外部访问Base的protected函数foo()。要调用foo()函数,只需在bar()函数中将Base类的对象作为参数传递,并通过该参数调用foo()函数即可。

总结来说,在C++中想要在类外部调用protected函数,可以通过将调用代码封装在派生类的成员函数或友元函数中来实现。这些技巧使得保护的函数可以更加灵活和易于管理,同时保持了数据的封装性和安全性。

  
  

评论区