C++中关于多态的问题
class Base
{
public:
virtual void display() const
{ std::cout << "I am Base class !" << std::endl; }
virtual ~Base(){}
};
class Derive: public Base
{
public:
virtual void display()
{ std::cout << "I am Derive class !"<< std::endl; }
virtual ~Derive(){}
};
int main()
{
Base* pBase = new Derive();
Derive* pDerive = new Derive();
pBase->display();
pDerive->display();
delete pBase;
delete pDerive;
return 0;
}
程序输出结果是什么?
为什么会这样?
调试了一遍,也没看明白怎么回事
[解决办法]
#include <iostream>
class Base
{
public:
virtual void display() const
{ std::cout << "I am Base class !" << std::endl; }
virtual ~Base(){}
};
class Derive: public Base
{
public:
virtual void display() const
{ std::cout << "I am Derive class !"<< std::endl; }
virtual ~Derive(){}
};
int main()
{
Base* pBase = new Derive;
Derive* pDerive = new Derive();
pBase->display();
pDerive->display();
delete pBase;
delete pDerive;
return 0;
}
[解决办法]
函数的参数是编译的时候,搞定的,静态的。
虚函数是运行时才决定的, 属于动态的。
pBase->display()的时候,类型是基类,所以给的默认值是基类的,等运行的时候,因为虚函数表的原因,调用派生类的display,所以才这样。
最好不要这样搞!!!!!