在实现如下时,为什么指向抽象类的指针不会调用派生类成员函数

时间:2017-06-03 23:31:10

标签: c++

接下来,有一个抽象类"形状"和两个派生类"矩形"和"圈" 我正在使用Base类指向对象并将其初始化为派生对象。

为什么最后一个也打印"矩形"?

#include <iostream>
#include <string>

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

class Rectangle : public Shape {
public:
    void show() {
        std::cout << "Draw Rectangle" << std::endl;
    }
};

class Circle : public Shape {
public:
    void show() {
        std::cout << "Draw Circle" << std::endl;
    }
};

int main() {

    Shape *s = new Rectangle();
    s->show();

    Circle c;
    *s = c;

    s->show();

    return 0;
}

两者都打印&#34;矩形&#34;。为什么最后一个不打印&#34; Circle&#34;

但如果我这样做

Circle *c = new Circle();
s = c;
s->show();

然后打印&#34; Circle&#34;

0 个答案:

没有答案