向下类型转换,该如何解决
向下类型转换
之前一直没有考虑过这个问题,刚才试了一下,pb竟然可以调用func2和func3.大家给详细解释一下,thx
------解决思路----------------------
非虚函数,按照指针类型,直接调用了
虚函数,才根据对象类型(实际是,去读取对象内部的虚函数表)来调用。
由于没有使用 this 指针,所以没有出错而已。
#include <iostream>
using namespace std;
class A
{
public:
A(int _a):a(_a){}
virtual void foo()
{
cout<<"A::foo"<<endl;
}
void func()
{
cout<<"A::func"<<endl;
}
private:
int a;
};
class B:public A
{
public:
B(int _a, int _b):A(_a),b(_b){}
void foo()
{
cout<<"B::foo"<<endl;
}
void func2()
{
cout<<"B::func2"<<endl;
}
void func3()
{
cout<<"B::func3"<<endl;
}
private:
int b;
};
int main()
{
B b(1,2);
A a(5);
B *pb = (B*)&a; // 这里实际上最终还是pb指向子类b?
pb->func();
pb->func2();
pb->func3();
return 0;
}
之前一直没有考虑过这个问题,刚才试了一下,pb竟然可以调用func2和func3.大家给详细解释一下,thx
------解决思路----------------------
非虚函数,按照指针类型,直接调用了
虚函数,才根据对象类型(实际是,去读取对象内部的虚函数表)来调用。
由于没有使用 this 指针,所以没有出错而已。