C++ 一个关于多态性的问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 10:40:38
现在我有一个基类shape
有几个他衍生出的派生类,目的是打印这些图形
然后我用了一个swicth函数根据用户的选择打印相应的图形
CShape * t
case 1:
{
cout << "Please input height:" <<endl;
h = get_NonNegtiveNumber();
cout << "Please input location:" <<endl;
l = get_NonNegtiveNumber();
Triangle temp1( h , l );
t = &temp1;
temp1.print();
}
break;
case 2:
{
cout << "Please input height:" <<endl;
h = get_NonNegtiveNumber();
cout << "Please input location:" <<endl;
l = get_NonNegtiveNumber();
ReverseTriangle temp2 ( h , l );
t = &temp2;
temp2.print();
}break;
这里我挑了两个,可以看到我运用了基类的一个指针t,目的是想在程序结束的时候在打印一遍图形,即在swicth函数运行结束后,写一个 t->print();
这只是我想试一下行不行而写的,根据我的想法应该能显示出离开switch函数前的最后一个图形,但是没有。。。检查没有问题,运行后出现什么终止。。重试。。忽略。。。。。
求助

光就你贴出来的代码来看,我只发现一个错误!或许它就是你要找的原因!
其实,这种问题,你应该贴出整个代码的。
我发现的一个问题是:
在每个case语句中,你定义了一个CShape的派生类对象,然后将其地址赋值给指针t。貌似是正确无疑的,但当离开switch语句(不是你说的函数,注意专业严谨性)后,你所定义的对象就已经结束了其生命期,自动析构了。所以你的t指针指向的是一个无效的地址!
你应该用new来定义一个CShape的派生类对象指针,再赋予t。
如果还不行的话,就贴出整个代码吧。
最后给你一个建议:学会调试,一般的小问题都会迎刃而解!

先加分在教你哦

代码···