如何在派生类中实现私有虚函数?

时间:2010-03-16 14:53:58

标签: c++ virtual private-members

我知道 why 我想使用私有虚拟函数,但我究竟能如何实现它们呢?

例如:

class Base{
[...]
private:
 virtual void func() = 0;
[...]
};

class Derived1: public Base{
  void func() 
  { //short implementation is ok here
  }
};

class Derived2: public Base{
  void func(); //long implementation elsewhere (in cpp file)
};

[...] 

void Derived2::func()
{ //long implementation 
}

第一个版本没问题,但并不总是可行。 是不是第二个版本只是名字隐藏?如果你不能在Base::func()的类声明中做到,那么如何定义Derived2的{​​{1}}?

由于

3 个答案:

答案 0 :(得分:4)

  

如果你不能在Base::func()的类声明中做到,那么如何定义Derived2的{​​{1}}?

您没有定义“Dereived2 Base::func()”(无论这可能是什么),您定义Derived2。这对我来说很好:

Derived2::func()

你的问题是什么?

答案 1 :(得分:3)

多态性和可访问性是两个独立的概念。您始终可以覆盖基类的私有虚函数,但除了基类本身之外,您将无法从任何位置调用基类版本。此外,C++ FAQ Lite在这个主题上有相当长的条目。

答案 2 :(得分:-2)

根据我的理解,你正试图做多态。

实现多态性必须遵循4条规则。

  1. 您必须从基类继承。
  2. 您的职能必须在每个班级都有相同的名称。
  3. 您需要在每个函数前面加上虚拟关键字,并在子项结尾处使用override关键字。
  4. 您必须在主类上使用指针,并使用“new”关键字将其定义为子类型。
  5. 有关代码示例,请参阅此awesome wiki page

    希望这是你想要的。 ^^

    你真的,

    SeargX