首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2014-01-22 
C++中关于多态的问题class Base{public:virtual void display() const{ std::cout I am Base class !

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

热点排行