1

考虑以下代码:

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

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

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

谢谢,

毗湿奴。

4

3 回答 3

3

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

于 2011-06-21T22:30:40.527 回答
1

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

Derived1 x;
Derived2 y;

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

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

rb然后,您可以通过统一处理and来使用多态性,pb而无需知道xand的具体类型y

于 2011-06-21T22:42:09.617 回答
0

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

于 2013-04-04T14:35:00.837 回答