基类指针指向派生类对象时,通过指针调用成员函数的规则

博客围绕C++代码展开,涉及定义派生类B的对象b、基类A的指针pa并将其指向派生类对象,还定义了派生类指针pa2,最后得出‘FuncA called’,答案选B。

 问题,如下代码的输出

class A

{

public:

 void FuncA()

 {

     printf"FuncA called\n" );

 }

 virtual void FuncB()

 {

     printf"FuncB called\n" );

 }

};

class B : public A

{

public:

 void FuncA()

 {

     A::FuncA();

     printf"FuncAB called\n" );

 }

 virtual void FuncB()

 {

     printf"FuncBB called\n" );

 }

};

void main( void )

{

 B  b;//语句1

 A  *pa;//语句2

 pa = &b;//语句3

 A *pa2 = new A;//语句4

 pa->FuncA(); //语句5

 pa->FuncB(); //语句6

 pa2->FuncA(); //语句7

 pa2->FuncB();//语句8

 delete pa2;

}

选项:

A

FuncA called

FuncB called

FuncA called

FuncB called

B

FuncA called

FuncBB called

FuncA called

FuncB called

C

FuncA called

FuncBB called

FuncAB called

FuncBB called

D

FuncAB called

FuncBB called

FuncA called

FuncB called

语句1.定义了一个派生类B的对象b;.

语句2.定义了一个基类A的指针pa,

语句3.将基类指针,指向派生类对象 

语句4.定义了一个派生类指针pa2.

语句5.一个指向派生类的基类指针调用了FuncA()函数,尽管派生类中重写了FuncA()函数,但是因为基类中的FuncA()函数不是虚函数,所以语句5仍然调用的是基类中的FuncA()函数。输出FuncA called。

语句6一个指向派生类的基类指针调用了FuncB()函数,因为基类中的FuncB()函数为虚函数,所以会调用派生类中的FuncB()函数。输出FuncBB called。

语句7和语句8都是调用基类成员函数。

所以选B

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值