通过被赋了派生类地址的基类指针调用类中的虚函数,如何还是调用了基类的函数
通过被赋了派生类地址的基类指针调用类中的虚函数,怎么还是调用了基类的函数?
#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)
------解决方案--------------------
嗯,同意
------解决方案--------------------
out(int)
重写了,但是out(double)没有重写
------解决方案--------------------
pA->out(1.0); 这是掉的out(double)
你在是是:pA->out(1);
#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)
------解决方案--------------------
嗯,同意
------解决方案--------------------
out(int)
重写了,但是out(double)没有重写
------解决方案--------------------
pA->out(1.0); 这是掉的out(double)
你在是是:pA->out(1);