类型转换的疑惑
先看下面的代码
#include <iostream>
using namespace std;
class A
{
public :
void find()
{
cout << "find::A" << endl;
}
virtual void get()
{
cout << "get::A" << endl;
}
};
class B:public A
{
public:
virtual void find()
{
cout<< "find::B" << endl;
}
void get()
{
cout << "get::B" << endl;
}
};
int main()
{
A *a_1 = new B();
a_1->find();
A *a_2 = new B();
a_2->get();
return 0;
}
输出为:
find::A
get::B
a_1和a_2同样是做了转换,为什么输出的不同呢?
a_1是输出类A中的函数而a_2是输出类B中的函数。
在这里我想知道a_1和a_2在被转换为指向类A的指针后,它接下来是如何判断是执行类A的函数还是类B的函数。
如果做这样的解释:
首先a_1会去类A中查找find()函数,它发现类A中的find()函数不是虚函数,就直接调用类A中的函数find()函数
可是这样无法解释a_2调用类B中的get()函数啊?
求大牛指点一二,本人困惑已久。
[解决办法]
有虚函数class都有一个虚函数表。非虚函数优先
[解决办法]
在子类中定义父类中的非virtual方法,会破坏它的多态性,而且并不会去重写父类中的非virtual!
第二明显是多态性,方法是会被重写。