A-A+

下列程序的输出结果是______。 include<iostream> using name

2022-08-06 05:11:31 问答库 阅读 176 次

问题详情

下列程序的输出结果是______。
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:
deriveA(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;
}请帮忙给出正确答案和分析,谢谢!

参考答案

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

考点:程序