当前位置: 首页 > 知识库问答 >
问题:

抽象类和虚拟函数

阮轶
2023-03-14

这个类会被认为是一个抽象类,因为它有一个虚拟函数吗?我仍然能够创建一个动物对象并调用getFood成本();

我认为抽象类不能被实例化,这是否意味着对象可以具有虚拟功能而不被认为是抽象类?

class Animal
{
public:
    Animal();
    int getBabies();
    double getFoodCost();
    virtual double getPayOff();
    int getQty();

    void incAge();
    void setAge(int);

protected:
    int counter=0;
    int age;
    int cost;   
};

共有2个答案

缪宪
2023-03-14

抽象函数是一个虚拟的成员函数,对于它,=0,如

virtual double getPayOff() = 0;

至少有一个抽象函数(包括继承函数)的类是抽象类。只有纯虚函数的类是所谓的纯抽象类(也称为接口类)。

因为你的getPayOff函数不是纯虚拟的,所以你的类也不是抽象的。

梅飞宇
2023-03-14

这个类会因为只有一个虚函数而被认为是抽象类吗?我仍然能够创建一个动物对象并调用getFoodCost();

不是。在C语言中,“抽象类”通常指具有纯虚函数的类:

class Abstract {
public:
    virtual void PureVirtual() = 0; // no implementation
};

class NotAbstract {
    virtual void NotPureVirutal() {
        // Some implementation
    }
};

我认为抽象类不能被实例化。

是的,没错。这是因为抽象类的函数没有必需的实现。它无法直接实例化实例。它使用继承和指针/引用来引用抽象类。

这是否意味着对象可以具有虚拟函数而不被视为抽象类?

对同样,抽象类是具有纯虚函数的类。这与常规虚拟函数不同。如上所述,纯虚拟函数没有必要的实现。另一方面,常规的虚拟函数需要有一个与之关联的实现,以便可以实例化它们。

 类似资料:
  • 在 C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上 ,表明此函数为纯虚函数。 最后的 并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建对象。

  • 请考虑以下代码: 类派生自抽象基类,但“隐藏”实现的方法作为私有成员。尽管如此,继承的成员能够调用,这在基类中是公共的。代码在g 10.1.0和clang 11.1.0编译时没有警告。 这是一个合法的代码吗,即继承的是否正确地看到私有成员? 或者,派生类< code>B是否可以实现基类的纯虚拟方法,这样它们只能由< code>B(和友元)调用?

  • 问题内容: 我正在查看Java 8接口中的新虚拟扩展方法: 我的目的是允许接口随着时间的推移以及多重继承的发展而演变,但是在我看来,它们看上去非常像抽象类。 如果您要进行新工作,则是使用抽象类而不是扩展方法来为“接口”提供实现,或者这两种方法在概念上是否等效? 问题答案: 这种构造的主要目的是保持向后兼容性。在Java语言中添加闭包是一个重大的更改,需要对其进行更新以充分利用此功能。例如,在Jav

  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 本文向大家介绍什么是虚函数?什么是抽象函数?相关面试题,主要包含被问及什么是虚函数?什么是抽象函数?时的应答技巧和注意事项,需要的朋友参考一下 答: 虚函数:没有实现的,可由子类继承并重写的函数。Virtual CallSomeOne(); 抽象函数:规定其非虚子类必须实现的函数,必须被重写。public abstract void CallSomeOne();  

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗