C++ 为什么静态内存不显示多态性?

C++ 为什么静态内存不显示多态性?,c++,dynamic,polymorphism,C++,Dynamic,Polymorphism,我制作了两个简单的多边形和三角形类。(三角形是从多边形继承的,两者都有virtual Draw()函数) 调用代码很简单: void main() { Polygon *p_t = new Triangle(); Polygon p_tStatic; Triangle t; p_tStatic = t; cout<<"Calling Dynamic Allocated Memory's

我制作了两个简单的多边形和三角形类。(三角形是从多边形继承的,两者都有virtual Draw()函数)

调用代码很简单:

 void main()
    {

        Polygon *p_t = new Triangle();

        Polygon p_tStatic;
        Triangle t;

        p_tStatic = t;

        cout<<"Calling Dynamic Allocated Memory's Draw():"<<endl;
        p_t->Draw();

        cout<<"Calling Static Allocated Memory's Draw():"<<endl;
        p_tStatic.Draw();

        _getch();
    }
void main()
{
多边形*p_t=新三角形();
多边形p_tStatic;
三角形t;
p_tStatic=t;

cout
p\u tStatic
是并且将永远是一个
多边形
。它不是一个
三角形


对象在构造后不能更改类型。

考虑程序的两个阶段:首先是编译阶段,然后是运行阶段,如果您不将变量声明为引用或指针,则在编译期间其类型已确定为
多边形
,其成员函数为ca从运行时(实际运行程序时)发生的动态绑定中获益,您需要通过指针或引用调用对象。

如上所述,从静态内存创建的对象永远无法更改其类型;无论是编译时还是运行时。三角形是多边形,因此多边形只获取三角形中适合多边形的部分(即对象切片)因此,我们不能在运行时

上执行多态性,你是问为什么C++语言是这样设计的?为什么它不允许我们?运行时多态性有一个开销,而且语言并没有强迫你去接受它。你的代码的语义是你在代码< >多边形< /COD>对象上调用<代码>多边形< /COD>成员。<代码>p_tStatic
对三角形一无所知。请查看“三定律”,您所做的是在初始化过程中对对象进行切片。查找仍然是动态的,只有实际(动态和静态)类型不是您所期望的。