【问题标题】:Creating an array of pointers of derivative class objects. C++. Abstract base class创建派生类对象的指针数组。 C++。抽象基类
【发布时间】:2013-08-30 14:47:31
【问题描述】:

我需要创建一个包含 100 个指针的数组,指向从抽象类派生的两个类的对象。

数组的第一个元素是class B,第二个是C,第三个是B等等。

A同时是基类和抽象类。

例如:

class A
{
 public:
   A();
   virtual double pureVirtualMethod() = 0;
};

class B: public A
{
};
class C: public A
{
};

main() 中,我需要创建一个指向任何派生类的指针数组。

我不能使用 Stl 或 Boost。

【问题讨论】:

  • 很酷的故事,埃米尔。你有问题吗? :)
  • 你的意思是A *aa[100]?
  • 拜托这明明是硬件,你为什么不至少先搜索谷歌
  • @itwasntpete 不,他的意思是std::array<A*,100>。或std::vector<A*>.
  • @LuchianGrigore 好的。首先我认为他的意思是boost::array<A*, 100>。谢谢纠正我。

标签: c++ pointers inheritance polymorphism abstract-class


【解决方案1】:

cmets 是对的。您可以在 5 秒内 google 答案。 无论如何...

你需要为A定义构造函数的主体,或者去掉声明并使用默认的

由您来删除数组以避免内存泄漏:)

class A
{
 public:
   A() {} // <----- ADDED BODY
   virtual double pureVirtualMethod() = 0;
};

int main()
{
    A* names[100];
    for (int i = 0; i < 100; ++i)
    if (i % 2)
        names[i] = new C();
    else
        names[i] = new B();
}

【讨论】:

  • 是的,它有效。我试过这样做,但我遇到了一些错误,因为事实证明我只需要重新启动我的 Qt。
【解决方案2】:

既然没有问题:确保你的基类有一个virtual 析构函数。如果没有 virtual 析构函数,您将无法轻松删除对象。为了维护对象,如果我必须自己编写它,我会创建一个简单版本的std::unique_ptr(好吧,对于我自己的标准库实现,我显然有一个我认为我应该能够使用的实现。 ..)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 2013-11-30
    • 2014-06-16
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多