c++问题 请帮忙解释一个下列语句的含义

来源:百度知道 编辑:UC知道 时间:2024/05/10 23:59:09
#include<iostream>
using namespace std;
class A
{
public:
virtual void fa (void){cout<<"A::fa"<<endl;}
void fb(void){cout<<"A::fb"<<endl;}
};
class B:public A
{public:
void fa(void){cout<<"B::fa"<<endl;}
void fb(void){cout<<"B::fb"<<endl;}
};
void main()
{
A *pa=new A;
A *pb=new B;
pa->fa();
pb->fb();
pb->fa();
pb->A::fa();
((B*)pb)->fb();
}
其中(1)、A *pa=new A;(2)、A *pb=new B;(3)pb->fb();(4)((B*)pb)->fb();如果这两句 pa->fa(); pb->fa();和第三句解释方法不一样,请帮忙解释一下。

A *pa=new A
动态建立一个类A,并用指针pa指向其首地址,指针类型是类类型A

A *pb=new B
动态建立一个类B,并用指针pb指向其首地址,指针类型是类类型A

pb->fb();
让指针pb指向B类中的fb()函数 ,此时指向fb()的指针是类类型A

((B*)pb)->fb();
强制转换指针pb类型为类类型B,并让它指向fb()函数,此时指向fb()的指针是类类型B,但是pb仍然是类类型A

fa() 是一个虚函数,在用基类指针调用它的时候,会根据指针指向的具体对象来调用基类或子类中的函数。

pa->fa();
pb->fa();
运行结果分别是
A::fa;
B::fa;

PB->fb();
运行结果是 A::fb,由于不是虚函数,所以只能根据指针的类型去调用相应函数了