首页 > 试题广场 >

定义两个类A和B。 class A { public: vo

[单选题]
定义两个类A和B。
class A
{
public:
   void Func() { cout << "A.Func" << endl; }
};
class B : public A
{
public:
   void Func() { cout << "B.Func" << endl; }
};
执行以下代码后,控制台的输出为:
int main(int argc, char** argv)
{
   B b;
   A* a = &b;
   b.Func();
   a.Func();
}
  • A.Func
    A.Func
  • A.Func
    B.Func
  • B.Func
    A.Func
  • B.Func
    B.Func
1. 首先分析代码: - 定义了类A和类B,类B公有继承自类A。并且在类B中重写了类A中的Func函数。 - 在main函数中,创建了类B的对象b,然后定义了一个指向类A的指针a,并让它指向对象b。 2. 接着看函数调用: - 当执行b.Func()时,因为b是类B的对象,所以会直接调用类B中重写后的Func函数,输出 B.Func 。 - 当执行a.Func()时,由于a是指向类B对象的类A指针,并且Func函数在类A中是普通成员函数(这里不是虚函数,虽然类B重写了它,但多态性基于虚函数机制,这里没有体现多态),所以会根据指针的类型(即类A)来调用类A中的Func函数,输出 A.Func 。 所以控制台的输出为: B.Func A.Func   答案是C。
发表于 2024-11-08 14:18:52 回复(0)
应该是a->Func()才对
发表于 2024-09-18 18:52:02 回复(0)