【问题标题】:Derived Class (Pure virtual C++) [duplicate]派生类(纯虚拟 C++)[重复]
【发布时间】:2014-12-16 15:57:39
【问题描述】:

我在使用纯虚方法的类库时遇到问题。 该方法应该是虚拟的。

我收到此错误:

Error: object of abstract class type "Membro" is not allowed: function "Membro::mensalidade" is a pure virtual function

有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 您不能创建抽象类型的实例。 Membro 包含一个纯虚方法,因此是抽象的。您不能创建 Membro 类型的对象。 (我知道这基本上是错误消息所说的,但是......)
  • Membro 包含纯虚函数,因此无法实例化。
  • “应该是虚拟的”是什么意思?

标签: c++ class virtual derived


【解决方案1】:

从错误消息中可以清楚地看出问题:您可能没有实例化抽象类的对象。

但是,似乎没有必要在您展示的函数中创建抽象类的对象。据我了解,该函数使用给定的字符串 bi 搜索对象。您可以在某些搜索方法中使用 lambda 表达式。

问题在于函数的设计不正确。 要获得更准确的答案,您应该显示函数以及成员的类型。

【讨论】:

  • 如何在不创建新对象的情况下找到成员?
  • @Mister Jonh 什么是成员类型?
  • membros 是成员的集合。 Membro 是类基类,有 2 个派生类。
  • @Mister Jonh 第二次尝试:成员的类型是什么?
  • ColecaoHibrida 成员;构造函数:Membro(string b, string nom);
【解决方案2】:

就像错误说Membro::mensalidade 是一个纯虚函数。这意味着您不能直接使用Membro,但您必须在子类中实现它并至少重新实现所有纯虚方法。

【讨论】:

  • 但我想使用成员的属性来查找成员。 mensalidade 方法是多么纯粹,我无法创建新对象。我该怎么做?
【解决方案3】:

如果一个类至少包含一个纯虚函数,那么该类是抽象的。这意味着您不能创建该类的对象。抽象类充当更多派生类的接口类。

但是,您可以定义纯虚函数。但此功能的用途有限,只能给您的同事留下深刻印象。

【讨论】:

    【解决方案4】:

    您不能实例化抽象类。

    如果任何类包含至少一个纯虚拟方法(例如,在函数签名末尾带有 =0; 的任何内容),则它是抽象类。

    您必须实例化一个派生自抽象类的类(该类必须实现纯虚函数以使其本身不是抽象的)并返回一个指向该类的指针。指针的类型可以是抽象类的类型,它指向的对象必须是抽象类的子类,允许你多态地访问派生类

    【讨论】:

    • “如果它包含多个纯虚拟”应该是“如果它包含至少一个纯虚拟”
    • 注明并更正,谢谢:)
    【解决方案5】:

    您必须在派生类中实现virtual 方法。确保在从类派生时实现它是纯虚拟的。这也意味着该方法没有默认实现。

    这种类有一个名称,它们被称为 Abstract Classes。或接口

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2013-10-07
      • 2016-05-04
      • 1970-01-01
      • 2018-01-05
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多