有如下程序:
#include<iostream>
using namespace std;
class B
public:
virtual void show( )cout<<"B";
;
class D:public B
public:
void show( )cout<<"D";
;
void funl(B*ptr)ptr->show( );
void fun2(B&ref);ref.show( );
void fun3(B b)b.show( );
int nlain( )
B b,*P=Dew D;
D d;
funl(p);
fun2(b);
fun3(d);
return 0;
程序的输出结果是
A.BBB
B.BBD
C.DBB
D.DBD
参考答案:C
解析: 基类指针可以指向派生类对象,在对象作为参数传递时,是通过“传值调用”传递给函数的,是单向传递。使用对象指针对函数参数进行传递时,是通过“传址调用”传递给函数的,即函数的形参对象和实参对象指针变量指向同一内存地址;使用对象引用作为函数参数时,也是通过“传址调用”传递给函数的。funl(p)传递的是类D对象的地址,所以调用类D的是show( ),fun2(b)调用的和传递的都是类B的对象引用,所以调用类B的show( )。调用’fun3(d)时,由于void fun3(B b)传递的虽然是D类对象,但是形参是B类对象,所以调用基类B的show( )。