私有继承:如何创建基类的对象(具有纯虚方法)?

时间:2011-06-21 22:26:49

标签: c++ pure-virtual virtual-method private-inheritance

请考虑以下代码:

class Base
{
  protected:
  virtual void methodDefinedInBase() = 0;
}

Class Derived: private Base
{
  public:
  void someMethod();
  protected:
  virtual void methodDefinedInBase()
  {
    std::cout<<"From B"<<std::endl;
  }
}

在上面的代码中,我可以创建“Derived”类型的对象。 C ++允许我从Derived类中的“someMethod()”访问方法“methodDefinedInBase()”。但是,如何创建“Base”类型的对象?

谢谢,

3 个答案:

答案 0 :(得分:3)

正如Beta在评论中指出的那样,您无法实例化抽象基类(使用纯虚方法的基类)。您只能实例化实现这些纯虚方法的派生类。无论您是使用公共继承还是私有继承,都是如此。

答案 1 :(得分:1)

你不创建“Base”类型的任何对象 - 通过给Base一个纯虚拟成员,你明确地说这个类本身不能存在,而只能通过派生类存在。你想要创建的是指针引用到Base:

Derived1 x;
Derived2 y;

// Somewhere inside Derived1:
Base & rb = x;

// Somewhere inside Derived2:
Base * pb = &y;

然后,您可以通过统一处理rbpb来使用多态,而无需了解xy的具体类型。

答案 2 :(得分:0)

基类中纯虚函数的声明意味着:1。此类的对象无法实例化。 2.要实例化派生类的对象,必须定义所有纯虚函数。换句话说,纯虚方法不允许您创建一个定义的类的对象。