C调用公共基类的私有/受保护函数

在下面的示例中,有一种很好的方法可以从B :: bar()调用A :: foo()吗?

class A {
protected:
  void foo() {}
};

class B : public A {
public:
  void bar(A& a) { // edit: called with &a != this
    a.foo(); // does not work
  }
};

除了宣布B成为A的朋友之外,我想不出任何其他事情,但是这可能会因为更多的课而变得非常难看.

有任何想法吗?

解决方法:

是的,您可以使用基类功能.

class A {
protected:
  void foo() {}
  void do_other_foo(A& ref) {
      ref.foo();
  }
};

class B : public A {
public:
  void bar(A& a) { // edit: called with &a != this
    this->do_other_foo(a);
  }
};
上一篇:数据结构


下一篇:c – 在模板类中定义模板化的友元函数