在面向对象编程中,抽象类充当其他类继承的蓝图。然而,由于它们的不完整性质,它们不能直接实例化。此限制扩展到声明抽象类的 std::vector,引发错误,指出“无法实例化抽象类。”
抽象类是用纯虚函数声明的函数,没有实现。这意味着它们不是可以创建为对象的具体实体。相反,它们应该被继承,并且它们的抽象函数在子类中实现。
要解决这个问题,有两个主要的解决方法:
指向抽象类的指针向量:
而不是声明一个抽象类的 std::vector ,您可以使用指向抽象类的指针的 std::vector 。这允许您在保留多态行为的同时存储子类的实例。
std::vector<IFunnyInterface*> ifVec;
派生类向量:
而不是使用抽象类,您可以可以创建派生类,该派生类继承抽象类并提供其所有虚函数的具体实现。然后,您可以声明该派生类的 std::vector。
class FunnyDerived : public IFunnyInterface { // Implement abstract function }; std::vector<FunnyDerived> fdVec;
虽然限制 std::vector 的创建似乎违反直觉抽象类是面向对象编程的一个基本方面。通过使用指向抽象类或派生类的指针,您可以在遵守抽象类的限制的同时保持灵活性和多态性。
以上是为什么我不能创建抽象类的 `std::vector` ?的详细内容。更多信息请关注PHP中文网其他相关文章!