读书人

C++中关于多态的有关问题

发布时间: 2014-01-22 00:03:39 作者: rapoo

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,所以才这样。
最好不要这样搞!!!!!

读书人网 >C++

热点推荐