问题
单项选择题
有如下程序: #include<iostream> using namespace std; class Base{ public:virtual void func1(){cout<<"Base 1";}void rune2(){cout<<"Base 2";} }; class Derived:public Base{ public:void func1(){cout<<"Derived 1";}void func2(){cout<<"Derived 2";} }; int main(){Base *p=new Derived;P->func1();P->func2();return 0: } 运行此程序,屏幕上将显示输出______。
A.Derived 1 Base 2
B.Base 1 Base 2
C.Derived 1 Derived 2
D.Base 1 Derived 2
答案
参考答案:A
解析: 派生类Derived由基类Base公有继承而来。调用p->func1();后,执行派生类Derived的函数void func1();调用p->rune2();后,执行基类的函数void func2(),因为虚拟函数是根据对象的实际类型调用,非虚拟函数是根据指针类型调用。故通过指针p调用func2时将直接调用基类中的void func2()。