首页 > 后端开发 > C++ > 为什么我不能创建抽象类的 `std::vector` ?

为什么我不能创建抽象类的 `std::vector` ?

Barbara Streisand
发布: 2024-11-27 17:22:12
原创
250 人浏览过

Why Can't I Create a `std::vector` of Abstract Classes?

理解 std::vector 的禁止

在面向对象编程中,抽象类充当其他类继承的蓝图。然而,由于它们的不完整性质,它们不能直接实例化。此限制扩展到声明抽象类的 std::vector,引发错误,指出“无法实例化抽象类。”

抽象类问题

抽象类是用纯虚函数声明的函数,没有实现。这意味着它们不是可以创建为对象的具体实体。相反,它们应该被继承,并且它们的抽象函数在子类中实现。

解决方法

要解决这个问题,有两个主要的解决方法:

  1. 指向抽象类的指针向量:
    而不是声明一个抽象类的 std::vector ,您可以使用指向抽象类的指针的 std::vector 。这允许您在保留多态行为的同时存储子类的实例。

    std::vector<IFunnyInterface*> ifVec;
    登录后复制
  2. 派生类向量:
    而不是使用抽象类,您可以可以创建派生类,该派生类继承抽象类并提供其所有虚函数的具体实现。然后,您可以声明该派生类的 std::vector。

    class FunnyDerived : public IFunnyInterface
    {
        // Implement abstract function
    };
    
    std::vector<FunnyDerived> fdVec;
    登录后复制

结论

虽然限制 std::vector 的创建似乎违反直觉抽象类是面向对象编程的一个基本方面。通过使用指向抽象类或派生类的指针,您可以在遵守抽象类的限制的同时保持灵活性和多态性。

以上是为什么我不能创建抽象类的 `std::vector` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板