gpt4 book ai didi

c++ - 为什么我们需要抽象类而不是虚拟类?

转载 作者:太空狗 更新时间:2023-10-29 20:24:43 25 4
gpt4 key购买 nike

我知道关于这个话题有很多问题。但是,我无法理解使用抽象类而不是虚拟类的确切需求。如果我没记错的话,抽象类也是隐含的虚类,它们之间的唯一区别是必须在子类中重写抽象方法。那么,为什么虚拟类还不够呢?在哪些情况下我们确实需要抽象类而不是虚拟类?

最佳答案

首先,“虚拟类”是不存在的。我假设你的意思是说一个多态类(至少有一个虚拟成员函数,当然还有一个虚拟析构函数)。

没有“需要”抽象类(那些至少有一个纯虚拟成员函数的类),但它们有助于创建不能实例化的接口(interface),但只提供一堆可重写的成员职能。它允许您提供一个公共(public)基类来帮助实现多态性,以防实例化这样一个公共(public)基类没有任何意义或违背设计者意图的情况。

/**
* Instantiating `IType` cannot serve a purpose; it has
* no implementation (although I _can_ provide one for `foo`).
*
* Therefore, it is "abstract" to enforce this.
*/
struct IType
{
virtual void foo() = 0;
virtual ~IType() {}
};

/**
* A useful type conforming to the `IType` interface, so that
* I may store it behind an `IType*` and gain polymorphism with
* `TypeB`.
*/
struct TypeA : IType
{
virtual void foo() override {}
};

/**
* A useful type conforming to the `IType` interface, so that
* I may store it behind an `IType*` and gain polymorphism with
* `TypeA`.
*/
struct TypeB : IType
{
virtual void foo() override {}
};

关于c++ - 为什么我们需要抽象类而不是虚拟类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com