下列程序的输出结果是______。 #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; }
参考答案:Y
解析: 本题考核虚函数的定义和调用。在C++中,一个基类指针(或引用)可以用来指向它的派生类对象,而且通过这样的指针 (或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。题中基类成员函数set()被定义成虚函数,而且其派生类deriveA和deriveB都有函数set()的重定义版本,所以通过指针pbase的两次调用分别调用的是派生类deriveA和deriveB中定义的版本,即输出25。