问题 单项选择题

有下列程序: #include<iostream> using namespace std; class TestClass { public: virtual void fun1() { cout<<"fun1TestClass"; } virtual void fun2() { cout<<"fun2TestClass"; } }; class TeStClaSS1:public TestClass { void fun() { cout<<"fun1TestClass1"; } void fun2(tnt x) { cout<<"fun2TestClass1"; } }; int main() { TeStClass obj1,*p; TestClaSS1 obj2; p=&obj2; p->fun1(); p->fun2(); retrn 0; } 执行后的输出结果是( )。

A.fun1TeStClass1 fun2TeStClass

B.fun1TestClass1 fun2TestClass1

C.fun1TeStClass fun2TeStClass

D.fun1TestClaSSfun2TestClaSS1

答案

参考答案:A

解析:
TestClass为基类,TestClass1是TestClass的派生类。基类中的fun1和fun2被定义为虚函数,C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数,所以派生类中的fun1和fun2也是虚函数。本题从main主函数入手,首先定义了TestClass类型的对象ob1和指针p,然后又定义了TestClass1的对象obj2。指针指向对象obj2,然后调用其成员函数fun1(),即输出“fun1TesClass1”。
多态性是在程序运行过程中才动态地确定操作指针指向的对象,“p->fun2();”语句中没有任何参数,并不是调用派生类中的fun2(int x),而是调用其基类中的fun2(),所以输出“fun2TestClass”。

填空题
判断题