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

通过被赋了派生类地址的基类指针调用类中的虚函数,如何还是调用了基类的函数

2013-11-29 
通过被赋了派生类地址的基类指针调用类中的虚函数,怎么还是调用了基类的函数?#include iostreamusing na

通过被赋了派生类地址的基类指针调用类中的虚函数,怎么还是调用了基类的函数?
#include <iostream>
using namespace std;

class A
{
public:
virtual void out(int)
{
cout<<"A int"<<endl;
}
void out(double)
{
cout<<"A double"<<endl;
}
};

class B: public A
{
public:
void out(int)
{
cout<<"B int"<<endl;
}
};

void main()
{
B b;
A *pA = &b;
pA->out(1.0);
}

程序输出:
A double

怎么回事,这个不是首先到派生类中找,派生类中是有一个out,但是这个out不是已经把基类中的给out屏蔽了吗? 虚函数
[解决办法]
不会屏蔽的!
因为强转的基类对象,虽然是子类地址!但是基类中 out(double) 是静态地址的!
[解决办法]
B的虚表里面有两个函数  
一个是B:out(int)
另一个是A:out(double)

[解决办法]

引用:
B的虚表里面有两个函数  
一个是B::out(int)
另一个是A::out(double)


嗯,同意
[解决办法]
out(int)
重写了,但是out(double)没有重写
[解决办法]
pA->out(1.0); 这是掉的out(double)
你在是是:pA->out(1);

热点排行