有如下程序: #include<iostream> using namespace std; class B{ public: virtual void show( ){cout<<"B";} }; class D

admin2012-01-20  20

问题 有如下程序:    #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( )。
转载请注明原文地址:https://kaotiyun.com/show/gPVp777K
0

最新回复(0)