问题 填空题

下列程序的输出结果是 【15】

#include<iostream>

using namespace std;

class base{

public:

int n;

base (int x){n=x;}

virtual void set (int m){n=m;cout<<n<<’’;}

};

class deriveA:public base{

public:

dericeA(int x):base(x){}

void set(int m){n+m;cout<<n<<’’;}

};

Class deriveB:public base{

public:

deriveB(int x):base(x){}

void set(int m){n+m;cout<<n<<’’;}

};

int main()

{

deriveA d1(1);

deriveB.d2(3);

base*pbase;

pbase=&d1;

pbase->set(1);

pbase=&d2;

pbase->set(2);

return 0;

}

答案

参考答案:Y

解析:

本题考核虚函数的定义和调用。在C++中,一个基类指针(或引用)可以用来指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。题中基类成员函数set()被定义成虚函数,而且其派生类deriveA和deriveB都有函数set()的重定义版本,所以通过指针pbase的两次调用分别调用的是派生类deriveA和deriveB中定义的版本,即输出25。

单项选择题
多项选择题 共用题干题