c++ 程序的一个有关问题! 想的和运行结果不一样,求解释
c++ 程序的一个问题! 想的和运行结果不一样,求解释!
先上程序:
这个程序 我运行后输入 1 2 3结果都是我预期的,但是输入4或者以后的数字之后,它不会执行最下面那句 :cout<<p->get()<<endl;
按照我来分析这个程序,我觉得输入4 或者以后的数字后 它下面那个语句也会执行呀,然后就达不到那种效果。但是这个程序做到了,求解释。
------解决方案--------------------
1. A和B的get函数被覆盖了所以永远只会返回1, 要用virtual
2. 程序有2个明显的bug
a. 如果一上来就输入4,那么程序马上crash,因为此时p未定义
b 内存泄漏
先上程序:
#include <iostream>
using namespace std;
class A
{
public:
int get(){return 1;}
};
class B:public A
{
public :
int get(){return 2;}
};
void main()
{
while (1)
{
cout<<"(1)父类(2)子类(3)退出:";
int choice;
cin>>choice;
A*p;
bool quit=false;
switch (choice)
{
case 1:p=new A;
break;
case 2:p=new B;
break;
case 3:quit=true;
break;
default:cout<<"请输入1、2或者3。";
break;
}
if (quit==true)
{
break;
}
cout<<p->get()<<endl;
}
}
这个程序 我运行后输入 1 2 3结果都是我预期的,但是输入4或者以后的数字之后,它不会执行最下面那句 :cout<<p->get()<<endl;
按照我来分析这个程序,我觉得输入4 或者以后的数字后 它下面那个语句也会执行呀,然后就达不到那种效果。但是这个程序做到了,求解释。
------解决方案--------------------
1. A和B的get函数被覆盖了所以永远只会返回1, 要用virtual
2. 程序有2个明显的bug
a. 如果一上来就输入4,那么程序马上crash,因为此时p未定义
b 内存泄漏