通过超类的引用访问派生类

时间:2014-06-08 12:32:40

标签: c++ oop

我只是C ++的初学者和面向对象的东西。从C过渡。请忍受我的无知。这是继续:

Can a pointer to base point to an array of derived objects?

#include <iostream>

//besides the obvious mem leak, why does this code crash?

class Shape
{
public:
    virtual void draw() const = 0;
};

class Circle : public Shape
{
public:
    virtual void draw() const { }

    int radius;
};

class Rectangle : public Shape
{
public:
    virtual void draw() const { }

    int height;
    int width;
};

int main()
{
    Shape * shapes = new Rectangle[10];
    for (int i = 0; i < 10; ++i)
        shapes[i].draw();
}

Shape包含纯虚函数,因此它成为一个抽象类。因此,首先,在为其创建实例时应该存在编译器错误。但我没有得到任何编译器错误。

1 个答案:

答案 0 :(得分:2)

确实Shape包含pure virtual方法,但未实例化。

main函数包含Rectangle的实例化,它不是纯虚拟类。所以没有问题

int main()
{
    Rectangle * shapes = new Rectangle[10];
    for (int i = 0; i < 10; ++i)
        shapes[i].draw();
}

- 我重新发帖 R.来自该帖子的Martinho Fernandes 代码接受了答案