有如下类定义: class A { public: virtual void func(int x){ cout<<"func() in class A with input "<<x<<endl; } }; class B : public A { public: void func(int x) final{ cout<<"func() in class B with input "<<x<<endl; } }; class C : public B { public: void func(int x){ cout<<"func() in class C with input "<<x<<endl; } }; 则以下语句的输出为: A a; B b; C c; A* arr[3]={&a, &b, &c}; for (int i = 0; i < 3; i++) arr[i]->func(i); A. func() in class A with input 0 func() in class A with input 1 func() in class A with input 2 B. func() in class A with input 0 func() in class B with input 1 func() in class C with input 2 C. func() in class C with input 0 func() in class C with input 1 func() in class C with input 2 D. 编译时出错
时间: 2024-04-21 13:25:05 浏览: 58
答案是B。
在这个类继承关系中,类B重写了类A的虚函数func,并将其标记为final,这意味着类C无法再重写该函数。然而,类C仍然尝试重写func函数,这是不合法的。
在循环中,arr数组中的第一个元素指向类A的对象,因此调用的是类A中的func函数。第二个元素指向类B的对象,因为类B重写了func函数,所以调用的是类B中的func函数。第三个元素指向类C的对象,由于类C试图重写func函数,但由于该函数已被标记为final,所以调用的仍然是类B中的func函数。因此,输出应为“func() in class A with input 0 func() in class B with input 1 func() in class C with input 2”。
阅读全文